【问题标题】:Using ASP.NET session in WCF = Session lost every call在 WCF 中使用 ASP.NET 会话 = 会话丢失每次调用
【发布时间】:2014-12-03 11:43:38
【问题描述】:

我正在尝试做一个 WCF 网络服务来向客户端发布一些数据。客户端必须在访问数据之前进行身份验证,所以我制作了一种身份验证方法,该方法设置了一些会话变量。 当我尝试以另一种方法访问此会话变量时,它们始终为 NULL(我已尝试使用 WCF 测试客户端和一点 Winforms 测试客户端)。

我已经设置 aspNetCompatibilityEnabled="true" 我的 web.config 并将属性添加到我的服务类 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

这个测试:

if (HttpContext.Current.Session[CONST_SESSION_AUTHENTICATE] != null &&        (bool)HttpContext.Current.Session[CONST_SESSION_AUTHENTICATE] == true)

总是引用空会话变量...

我错过了什么?

谢谢

【问题讨论】:

  • 我可以建议您以错误的方式解决这个问题吗?尝试在标头中传递一个令牌,而不是尝试制作一个设计为无状态使用会话的机制!

标签: c# asp.net wcf session


【解决方案1】:

您如何称呼您的服务?您必须使用相同的服务客户端对象并允许使用 cookie。只有当客户端发回由 ASP .NET 创建的 cookie 时,会话才会起作用。

这是一个例子:

http://stack247.wordpress.com/2011/03/09/enable-cookies-session-in-wcf-aspnetcompatibilityrequirements/

【讨论】:

  • 我使用 Visual Studio 提供的 WCF 测试客户端进行测试。在我的 Winform 应用程序中,我使用了服务引用。这是否意味着 WCF 会话仅适用于 ASP 网站调用?
  • 使用 WCF 测试客户端将无法正常工作,但如果您打开 App.Config 并在绑定上设置 allowCookies=true,则添加服务引用将起作用。
  • 基本上,您需要一个支持 cookie 的客户端(当您执行第一个请求时,ASP .NET 服务器将发送回一个 cookie,客户端将存储该 cookie 并在每次请求时发送回用于识别)。当您添加服务引用并启用 cookie 时,您需要对其他请求使用相同的 serviceClient 对象(您创建的每个 serviceClient 都有自己的 cookie 容器)。
  • 这就是我对 WCF 测试客户端的假设。感谢客户端 app.config 上的 enablecookie!
猜你喜欢
  • 2018-11-12
  • 2017-09-20
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
相关资源
最近更新 更多