日期:2014-05-17  浏览次数:20446 次

我的服务器端程序有个类,需要与客户端访问一一对应,应该如何获取数据?
我的服务器端程序有个类,需要与客户端访问一一对应,应该如何获取数据?
(1)我的代码是asp.net mvc4开发
(2)我的asp程序的服务器端有个类,会通过dll与另一个服务器端程序交互,通过那个程序存写数据库信息。
(3)我要将我的客户端程序每个登录的用户信息通过这个类发给那个程序,那个程序返回不同的session,然后我需要使用这个seesion从那个程序获取需要的数据。
这样就相当于我的服务器端这个类是有多个实例。

结构如下:
客户端:        Client1   Client2   Client3
访问:          Server
服务器端有个类:MyClass (1,2,3等多个实例)
那个程序:      Application2

目前就遇到一个问题,我的服务器端如何知道该使用哪个MyClass的实例?
我有一个方法:
在server上使用session["MyClass"]=MyClass(N).
这样当客户端访问的时候,通过session,可以得到当前客户端所对应的MyClass。
但是由于我的MyClass会有很多属性,数据量大些,不知道session是否适合?或者可以使用其他什么方法吗?
欢迎提供建议。

------解决方案--------------------
定义一个静态字典类型的变量,存放sessionid和MyClass的对应关系
------解决方案--------------------
实际上web程序通常没有什么“一堆MyClass”,都是在请求到来时才创建MyClass实例。

当然,这种“创建”包括可以从Cache中把刚刚扔掉的MyClass实例重复捡起来使用的情况,以减少执行 new 创建新对象。(不过这并不妨碍程序设计基本逻辑,因此不要把优化措施当作设计障碍。一开始应该不考虑优化)




退一步说,假设你的所谓“一堆MyClass实例占在内存中总也不释放”是必须的,也就是说它们各自都保存着一套独立的数据,而且长期霸占内存,不敢重复使用到其它会话请求上,那么也可以很容易地查找到。你可以把它们保存在
private static Dictionary<string, MyClass> containers
类型的集合里,而你的session集合中只要保存“那个程序返回的session id”即可。因为这个编号保存在当前会话中,同时又直指“那个程序”的处理关键字,同时又可以用户从  containers[sid] 中直接返回 MyClass 对象,一举三得。