Web服务和asp.net应用程序之间共享会话

发布于 2024-08-29 15:26:11 字数 460 浏览 5 评论 0原文

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

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

我的问题是:是否有什么我遗漏或做错的事情导致我无法从 web 服务访问应用程序 sessioin?

I have an asp.net application and webservices (asmx) that reside in the same application but not in the same folder of the aspx files. I aslo have a winform application that uses the webservices. I have marked the webservice methods with [WebMethod(EnableSession = true)] but I am not able to share the same session values that are on the application in the webservices. The winform application has access to the sessionID from the application and I am using the following code

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

My question is: Is there something that I am missing or doing wrong that I cannot access the application sessioin from the webservices?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谈场末日恋爱 2024-09-05 15:26:11

我无法解释为什么你不能让 winforms 应用程序“劫持”会话 - 你正在做的事情看起来应该完全符合你的要求。

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

  • )如果高速缓存的信息适用于多个单独的用户(例如,访问控制),则相同的高速缓存的信息可以用于多个用户并且不必为每个会话获取。
  • b) 与会话数据相比,您可以更好地控制缓存的时间/何时清除它们(会话数据仅在会话的生命周期内存在,并且如果您忘记删除旧信息,则存在不断增长的危险)
  • c) 如果您无法使会话劫持起作用,您仍然可以从任何会话访问缓存中的数据。

I cannot shed any light as to why you are not able to have the winforms app "hijack" the session - what you are doing looks like it should do exactly what you want.

I wanted only to suggest that you use the application cache (to cache the response from you java service) instead of the user's session store. This has the following advantages: -

  • a) If the cached information is applicable to more than an individual user (e.g. access controlled), then the same cached information can be used for several users and not fetched for each session.
  • b) You have more control over how long things are cached for / when they are scavenged than you get with session data (which just lives for the lifetime of your session and has the danger of growing and growing if you forget to delete old information)
  • c) If you do not manage to get your session hijacking working, you can still access data in the cache from any session.
走过海棠暮 2024-09-05 15:26:11

您是否尝试过从 System.Web.SessionState.IRequiresSessionState 继承 webservice 类?

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

Have you tried inheriting your webservice class from System.Web.SessionState.IRequiresSessionState ?

It's normally used for http handlers, but webservices seem to use the same marker interface.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文