我已經在調用上下文(CallContext.SetData(key,data)
)上放置了一些數據,其中數據的類型實現了ILogicalThreadAffinative
。它實現ILogicalThreadAffinative的原因是它必須在當前應用程序的多個線程之間共享。如何限制邏輯調用上下文的範圍
但是,應用程序也會對另一個服務進行遠程調用,這就是問題出現的地方。我的ILogicalThreadAffinative實現不可序列化,不應該是。即使我將它標記爲可序列化,遠程應用程序也無法訪問聲明類型的程序集,因此無法對其進行反序列化。
那麼如何在我的應用程序(AppDomain)中共享呼叫上下文數據,而不是每次需要與之通話的外部應用程序呢?
我知道你已經找到了解決問題的方法,但是我最近發現Jeffrey Richter關於使用ExecutionContext.SuppressFlow來抑制邏輯線程數據流的書的摘錄。我不知道它是否適用於您描述的情況,但是,如果確實如此,它可能比您最終想出的更清晰:http://blogs.msdn.com/b/microsoft_press/archive/2010 /01/27/jeffrey-richter-excerpt-from-clr-via-c-third-edition.aspx – wageoghe 2011-01-04 18:59:31
Wagaoghe,這看起來很有希望作爲替代解決方案。我想在遠程的情況下測試一下。它的缺點是必須在調用代碼內部以每個調用爲基礎進行設置。上述解決方案更多地面向方面,並且在某些方面更清晰。 – 2011-01-21 18:48:32