使用.net 4.6.2

时间:2016-09-26 12:15:47

标签: c# wcf operationcontext

在调用异步操作(并且我的threadid更改)后,OperationContext变为null时出现问题。

我知道这是一个知道问题,我已经提出了一些StackOverflow问题。

.net 4.6.2中有一个问题的解决方法,因为您可以阅读here

  

OperationContext.Current异步改进

     

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

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

3 个答案:

答案 0 :(得分:3)

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

<appSettings>
    <add key="wcf:disableOperationContextAsyncFlow" value="false" />
</appSettings>

有关更多信息,请查看https://github.com/Microsoft/dotnet/issues/403,其中MS承认这实际上是一个重大变化。看起来这样很容易在现场打破很多应用程序。

答案 1 :(得分:1)

安装KB4013429操作上下文后,默认情况下禁用异步流。要启用它(并使用4.6.2中修复的功能),您需要将wcf:disableOperationContextAsyncFlow标志设置为&#34; false&#34;在您的应用配置中。 (我还没有发现有关此标志的任何信息,在修复有关OperationContext传播错误的问题时发现了该信息。)

答案 2 :(得分:0)

您正在描述的行为设法进入.NET 4.6.2版本,我们已经意识到了这一点。事实上,我们正在为此推出一个解决方案,我希望它能在未来几个月内公开发布。

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

OperationContext ocx = OperationContext.Current;

using (new OperationContextScope(OperationContext.Current))
    {
        OperationContext.Current = new OperationContext(ocx.Channel);
        // ...
    }

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