使用.net 4.6.2的异步方法后,OperationContext为null

Ami*_*ich 6 c# wcf operationcontext

OperationContext在调用异步操作(和我的threadid更改)后获取null 时遇到问题.

我知道这是一个已知问题,我已经提出了一些关于这个问题的StackOverflow问题.

.net 4.6.2没有为问题的解决办法,你可以看这里.

OperationContext.Current Async改进

WCF现在能够在ExecutionContext中包含OperationContext.Current,以便OperationContext流经异步延续.通过这种改进,WCF允许CurrentContext从一个线程传播到另一个线程.这意味着即使在调用OperationContext.Current之间有上下文切换,它的值也会在整个方法执行过程中正确流动.

为了得到我的支持,我需要做些什么特别的事吗?我正在使用VS 2013,更新了框架4.6.2并安装了dev-pack.我已经改变了我要使用的项目,在异步调用后Framework 4.6.2我仍然得到一个null OperationContext.

use*_*722 5

根据 Tomasz 的回答,请确保您的应用配置中包含以下内容:

<appSettings>
    <add key="wcf:disableOperationContextAsyncFlow" value="false" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看https://github.com/Microsoft/dotnet/issues/403,其中 MS 承认这实际上是一个重大变化。似乎这可以很容易地破坏该领域的许多应用程序。


小智 0

您所描述的行为已成功进入 .NET 4.6.2 版本,我们已经意识到这一点。事实上,我们正在为此推出修复程序,我预计它会在接下来的几个月内公开发布。

目前已知的解决方法是恢复到 4.6.1 版本的框架或执行类似的操作:

OperationContext ocx = OperationContext.Current;

using (new OperationContextScope(OperationContext.Current))
    {
        OperationContext.Current = new OperationContext(ocx.Channel);
        // ...
    }
Run Code Online (Sandbox Code Playgroud)

如果您还有其他问题或意见,请告诉我们。