2010-06-02 56 views
0

我正在制作一个.net组件,导致一个dll程序集,它将被一个asp.net站点引用,另一个项目由一个asmx webservice引用。所有代码都是2.0版。.net(asp和webservice)中的会话信息

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

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

使用我的组件的Web服务中的问题是: 我并不十分在意会话状态,但我希望组件正常工作。如果每个呼叫生成一个新的会话ID,那没关系。

两种环境的结合导致以下问题对我来说:

  • 我不能用我的组件asp.net会议()变量而不引用的System.Web,这是有点愚蠢的,在包括我的组件的Web服务项目可能无法使用
  • 我不能计划我的组件作为一个单身,因为那样的话在网站上的应用程序,它的所有游客之间共享,覆盖会话和诸如此类的东西
  • 形成阵列在我的组件中“会话信息”,并保持很难编程(wh en是否会失效?),并且可能无法在Web场环境中工作

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

+0

将它存储在数据库中? – Greg 2010-06-02 15:16:15

+0

不幸的是,我将无法访问组件将被使用的数据库。 – Tominator 2010-06-02 15:31:51

回答

1

我创建具有.Create(按地址会话为HttpSessionState一个额外的类“工厂” ),看看传入的会话对象是否为Nothing,如果不是,则检查其中是否存在Component对象,如果是,则使用它,如果不是,则创建它并将其添加到会话中。

在webservice调用的情况下,工厂获取Nothing参数,因此它不检查会话对象。它似乎工作。

感谢您的回答!

1

也许我不理解你的要价,但你为什么不能这样做:

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

因为不幸的是,有更多的变量,而不仅仅是sessionid,也因为使用这个原则,我要求使用我的组件的程序员必须确保他也会执行会话存储部分(而不是仅仅使用它的方法并依靠它只是工作)。如果我的组件本身会照顾存储,那会更容易。也许我试图过分简化对方? – Tominator 2010-06-02 15:09:20

+0

你还记得什么? – cptScarlet 2010-06-02 16:56:43

+0

具有多个值的数组和更多数组的较大对象。有点难以解释究竟是什么,只是一堆数据..但我已经决定,用户可以传递一个会话参考,如果他想要的话,并与该对象得到保存。如果他什么都没有通过,它就不会得救。我猜两个世界都是最好的.. – Tominator 2010-06-03 07:53:10