WCF 和 ASP.NET 会话共享
这是我的案例,我正在为可扩展的应用程序开发基础设施。 我正在创建一个简单的 ASP.NET 客户端页面,该页面通过 AJAX 调用使用 WCF 服务(简单的 xmlhttp 对象而不是 .net 脚本管理器)。 我需要 2 个来共享会话,因此我指示 ASP.NET 客户端应用程序使用 aspnet_regsql.exe 工具将会话存储在 SQL 中。
我已检查 WCF 服务是否正在接收 ASP.NET 客户端生成的相同会话 ID,但在服务中会话密钥容器为空。
我的印象是它可能与配置中的应用程序名称有关,但我真的不知道......
有什么方向吗?
Here is my case, I am working on an infrastructure for a scale able application.
I am creating a simple ASP.NET client page that consumes a WCF service with an AJAX call (simple xmlhttp object not .net script manager).
I need the 2 to share sessions, so I have instructed the ASP.NET client application to store the session in SQL with the aspnet_regsql.exe tool.
I have checked that WCF service is receiving the same session ID that the ASP.NET client produces, but in the service the session keys container is empty.
I am under an impression that it might have something to do with the app name in the configuration, but I really don't know...
Any direction ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您必须与 WCF 服务共享 ASP.NET 会话,则需要查看 WCF 服务和 ASP.NET 在 MSDN 上了解如何启用 WCF ASP.NET 兼容模式。
大多数情况下,它可以归结为:
在 WCF 服务的服务端配置中。另外,您必须确保您的 WCF 服务实现不会显式拒绝 ASP.NET 兼容模式。
因此,您的 WCF 服务类必须允许甚至要求 ASP.NET 兼容性:
或者
If you must share ASP.NET session with WCF services, you need to check out WCF Services and ASP.NET on MSDN to find out how to enable the WCF ASP.NET compatibility mode.
Mostly, it boils down to:
in your WCF service's service-side config. Also, you must make sure your WCF service implementation doesn't explicitly deny the ASP.NET compatibility mode.
So your WCF service class must either allow or even require the ASP.NET compatibility:
or
我已经找到了我的问题的答案。
我需要更改使用“aspnet_regsql.exe”工具创建的 SQL ASPState DB 中的“TempGetAppID”过程,以采用 APP_NAME() 而不是传递的参数。
这确保了所有应用程序现在共享同一个会话。
一旦我进行了更改,WCF 服务就开始了解插入到我的 asp.net 应用程序中的会话。
问题解决了。
I have found the answer to my problem.
I needed to change the "TempGetAppID" procedure in the SQL ASPState DB created with the "aspnet_regsql.exe" tool to take the APP_NAME() and not the passed argument.
That made sure that all application now share the same session.
once I have made the change the WCF Service has started to be aware of sessions inserted in my asp.net application.
problem solved.