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.
根据 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)
如果您还有其他问题或意见,请告诉我们。