在调用异步操作(并且我的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
。
答案 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);
// ...
}
如果您有其他问题或意见,请告诉我们。