繁体   English   中英

安装.NET Framework 4.5后,HttpContext.Current.User为null

[英]HttpContext.Current.User is null after installing .NET Framework 4.5

我使用的是.NET 4.0 VS10。 我有使用表单身份验证的WCF服务。 我升级到VS11,.NET 4.5。

现在我的HttpContext.Current.User在wcf请求中为null。 我从登录中注入了一个cookie给这个请求。

HttpRequestMessageProperty httpRequest;
...
httpRequest.Headers.Add(HttpRequestHeader.Cookie, cookie);

任何想法如何让它再次工作?

已经有了

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

[AspNetCompatibilityRequirements(RequirementsMode = spNetCompatibilityRequirementsMode.Required)]

如果您在Oneway中遇到此问题(标记为[OperationContract(IsOneWay = true)]的操作)WCF操作合同,这就是问题的原因。 HttpContext是一个asp.net构造。 在成功调用单向操作之后,服务模型将202(已接受)回复发送回客户端。

  • 在4.5中,asp.net清除了HttpContext,因为响应已经被发送回客户端,这是设计的。
  • 在4.0中,这只是一个幸福的巧合,这个不受支持的场景有效。

由于我们在此发现了一些客户报告,因此在.net 4.5.1更新中进行了一个怪异的修复。 要提供有关修复的更多详细信息:

  1. 如果您的项目仍然以4.0为目标并且您在4.5.1计算机上运行应用程序,那么您的问题将得到解决(内部检查目标框架版本)。
  2. 如果您的项目重新定位到4.5,那么Httpcontext.Current.User将再次变为null,原因如上所述。 尝试使用OperationContext.Current.ServiceSecurityContext.WindowsIdentity来获取用户身份而不是HttpContext.Current.User属性。 此属性与主机无关,并在客户端通过身份验证时填充。

还有一个类似的问题的解决方案在这里

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

到您的配置文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM