【问题标题】:HttpContext.Current.User is null after installing .NET Framework 4.5安装 .NET Framework 4.5 后 HttpContext.Current.User 为空
【发布时间】:2013-02-26 11:33:31
【问题描述】:

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

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

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

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

已经有了

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

[AspNetCompatibilityRequirements(RequirementsMode = spNetCompatibilityRequirementsMode.Required)]

【问题讨论】:

标签: c# wcf cookies forms-authentication asp.net-4.5


【解决方案1】:

如果您在 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 属性。此属性与主机无关,并在您的客户端通过身份验证时填充。

【讨论】:

    【解决方案2】:

    有类似问题的解决方案here

    添加

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    

    到你的配置文件。

    【讨论】:

    • @user547297,我来自 .NET Framework 兼容性团队。我们希望更好地调查和理解这一点。您能否向我们发送一个简单的项目以在 microsoft dot com 的 netfx45compat 上重现该问题?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2022-12-28
    • 2013-01-12
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    相关资源
    最近更新 更多