.net中的会话信息(asp和web服务)

时间:2010-06-02 14:32:10

标签: asp.net web-services

我正在创建一个.net组件,导致一个dll程序集,将由asp.net站点引用,并在另一个项目中由asmx webservice引用。所有代码都是2.0版本。

该组件有一些函数可以调用外部Web服务,后者返回一个对象。这些功能之一是例如Login(用户名,密码),其为该用户生成唯一的会话ID。结果信息和会话ID存储在组件中的变量中。

网站上的问题是: 当用户登录前端,我的组件被调用并检查登录并生成会话ID时,我希望当用户浏览到站点中的另一个页面时,我的组件中的信息将保持不变。

使用我的组件的Web服务中的问题是: 我并不太关心会话状态,但我希望该组件能够正常工作。如果每次调用都会生成一个新的会话ID,那没关系。

这两种环境的组合对我来说会产生以下问题:

  • 我不能在我的组件中使用asp.net Session()变量而不引用system.web,这有点愚蠢,可能在包含我的组件的Web服务项目中不可用
  • 我无法将我的组件编程为单例,因为在网站应用程序中,它在所有访问者之间共享,覆盖会话和诸如此类
  • 在我的组件中创建一个“会话信息”数组并维护它很难编程(什么时候失效?)并且可能无法在Web场环境中工作

这种情况有解决方案吗?或者我应该创建我的组件的两个实例,一个用于网站,一个用于Web服务?

2 个答案:

答案 0 :(得分:1)

也许我不明白你的要求,但为什么你不能这样做:

Component.Login(user,pass);
Session["Component"] = Component.SessionID

答案 1 :(得分:1)

我创建了一个额外的类“Factory”,它有一个.Create(byref Session为HttpSessionState),它查看传入的会话对象是否为Nothing,如果没有,它会检查其中是否有Component对象,如果是这样,它会使用它,如果没有,它会创建它并将其添加到会话中。

在webservice调用的情况下,工厂获取Nothing-parameter,因此它不会检入会话对象。它似乎有效。

感谢您的回答!