3

我使用的是 .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)]
4

2 回答 2

2

如果您在 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 属性。此属性与主机无关,并在您的客户端通过身份验证时填充。
于 2013-08-27T17:36:17.477 回答
0

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

添加

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

到你的配置文件。

于 2013-03-11T10:28:52.303 回答