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

时间:2013-03-11 10:19:50

标签: c# wcf cookies forms-authentication asp.net-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)]

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

有类似问题的解决方案here

添加

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

到你的配置文件。