2016-09-26 175 views
6

我有一個OperationContext異步操作被調用(並且我的線程更改)後變爲空。在使用.net的異步方法之後OperationContext爲空4.6.2

我知道這是一個知道的問題,我已經拋出了一些關於這個問題的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,並且在異步調用後仍然會收到null OperationContext

+0

這是否也修復了WebOperationContext? – Rhyous

回答

0

您所描述的行爲已成功將其轉換爲.NET 4.6.2版本,並且我們意識到了這一點。事實上,我們正在爲此解決問題,我期待在未來幾個月內公開發布。

目前已知的解決方法是恢復到4.6.1版本的框架或做一些與此類似:

OperationContext ocx = OperationContext.Current; 

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

請讓我們知道,如果您還有其他問題或意見。

+0

對此有何更新? – Jedidja

+0

沒有:(但是,我預計很快會有一個補丁程序用於Win10,下層操作系統的補丁需要更長的時間才能部署 –

1

安裝KB4013429後,默認情況下禁用操作環境異步流。要啓用它(並使用4.6.2中修復的功能),需要在應用配置中將wcf:disableOperationContextAsyncFlow標誌設置爲「false」。 (我還沒有找到任何有關此標誌的信息,在解決OperationContext傳播錯誤的問題時發現它)。

1

每從托馬斯的回答,請確保以下是在你的應用程序配置:

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

欲瞭解更多信息,看看https://github.com/Microsoft/dotnet/issues/403其中MS承認這是,事實上,一個重大更改。看起來這很容易在現場打破很多應用程序。

+0

感謝您對StackOverflow的幫助,但Tomasz的評論似乎不再存在或者它一直是一個答案)如果你想添加一個細節到現有的答案,那麼你應該寫一個評論,該答案。如果你想做出答案,那麼確保所有需要的信息都在那裏(其他答案可能會以某種方式消失)。授予自動時間當然是一個好主意。如果你的添加不值得做出自己的答案,或者不是一個明顯更好的答案,那麼評論。 – Yunnosch

+0

我正在使用4.6.2,並且我的OperationContext爲空。 WCF。在VS 2017中進行調試測試,所以IISExpress。這個設置對兩種方式都沒有幫助。 – Rhyous