在wcf中使用会话

发布于 12-12 03:31 字数 113 浏览 1 评论 0原文

如果我将服务实例设置为“每个会话”或“单个”,我可以在会话中的服务实例之间发送一些数据吗?它应该在 Asp.net 会话中完成 - HttpContext.Current.Session 或者wcf有自己的会话?

If I set my servis instance as Per Session or Single can I send some data between services instance in session? It should be done in Asp.net session - HttpContext.Current.Session
or wcf have own session ?

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

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

发布评论

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

评论(2

离去的眼神2024-12-19 03:31:23

正如我所说 - WCF 不是 ASP.NET,它的会话处理有很大不同。虽然 ASP.NET 会话和 WCF 会话的名称相同,但它们的目的和用途却截然不同。

有关详细信息,请阅读 MSDN 页面在 WCF 中使用会话

一句话是:没有与 WCF 会话关联的通用数据存储。 - 所以答案是否定的 - WCF 中的会话用于数据存储。

WCF 会话只是将多个消息“捆绑”到一个对话中。默认情况下,使用“每次调用”模型,每个 WCF 服务请求都会获得自己的、新实例化的服务类实例来处理该请求,并且该服务类实例将在返回答案后被释放。使用会话可以避免这种情况 - 处理会话的第一次调用的服务类实例将在服务器端保持活动状态(因此也占用服务器上的内存),并将处理同一会话中的所有后续请求。

然而,WCF 和 Web 服务通常最好是无状态,因此会话在适当的 SOA 环境中有点奇怪的体系结构 - 这很可能就是为什么 WCF 中的会话也不如 ASP 有用的原因.NET 会话适用于 Web 应用程序。

为了保持无状态并支持每次调用方法(首选最佳实践),如果您需要在调用之间存储数据,请将其存储在持久存储(例如数据库)中,并在以后需要时从那里取回。

As I said - WCF is not ASP.NET and its session handling is vastly different. While ASP.NET sessions and WCF sessions are called the same - they are vastly different in their purpose and usefulness.

Read the MSDN page Using Sessions in WCF for more details.

One sentence reads: There is no general data store associated with a WCF session. - so the answer is no - sessions in WCF are not meant for data storage.

WCF sessions are merely to "tie together" several messages into a conversation. By default, with the "per-call" model, each WCF service request would get its own, freshly instantiated service class instance to handle the request, and that service class instance will be freed after returning the answer. Using sessions avoids this - the service class instance handling the first call of a session will stay alive on the server side (and thus also taking up memory on the server) and will handle all subsequent requests within the same session.

WCF and web services in general should however preferably be stateless, so sessions are a bit of an oddball architecture in a proper SOA environment - and that's most likely why sessions in WCF are also not nearly as useful as ASP.NET sessions are for web apps.

To remain stateless and support the per-call method (the preferred best practice), if you need to store data between calls, store it in a persistent store (e.g. a database) and fetch it back from there when needed later on.

我不咬妳我踢妳2024-12-19 03:31:23

如果您在 IIS 中托管服务,则可以启用 ASP.Net 兼容性模式。这将允许您使用 ASP.Net 会话状态,就像在 Web 应用程序中一样。

If you're hosting services in IIS, you can enable ASP.Net Compatability mode. This will allow you to use ASP.Net session state, just like you would in a web application.

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