在webservice和asp.net应用程序之间共享会话

时间:2010-04-23 13:21:41

标签: asp.net session web-services c#-2.0 sharing

我有一个asp.net应用程序和webservices(asmx),它们驻留在同一个应用程序中但不在aspx文件的同一个文件夹中。我还有一个使用webservices的winform应用程序。我用[WebMethod(EnableSession = true)]标记了webservice方法,但是我无法共享webservices中应用程序上的相同会话值。 winform应用程序可以从应用程序访问sessionID,我使用以下代码

Uri uri = new Uri(ServerServiceUrl);
_cookieContainer = new CookieContainer();
_cookieContainer.Add(new Cookie("ASP.NET_SessionId", SessionID, "/", uri.Host));

我的问题是:是否有一些我遗漏或做错的事情,我无法从网络服务访问应用程序sessioin?

2 个答案:

答案 0 :(得分:1)

我无法阐明为什么你无法让winforms app“劫持”会话 - 你正在做的事情看起来应该完全符合你的要求。

我只想建议你使用应用程序缓存(缓存来自java服务的响应)而不是用户的会话存储。这具有以下优点: -

  • a)如果缓存的信息不仅适用于单个用户(例如访问控制),则相同的缓存信息可用于多个用户,而不是为每个会话提取。
  • b)您可以更好地控制缓存事件的时间/清除时间,而不是会话数据(会话数据只存在于会话的生命周期中),如果您忘记删除,则会有增长和增长的危险旧信息)
  • c)如果您无法使会话劫持工作,您仍然可以从任何会话访问缓存中的数据。

答案 1 :(得分:0)

您是否尝试从System.Web.SessionState.IRequiresSessionState继承您的网络服务类?

它通常用于http处理程序,但webservices似乎使用相同的标记接口。