共用方式為


使用 CallContext

呼叫內容提供隨執行程式碼路徑攜帶的一組屬性。CallContext 類別的執行個體在執行程式碼路徑中往下和往回移動時,會逐漸加入項目。

CallContext 物件在內容與應用程式定義域之間流動時,會傳入至 IMessage 實作中的 "__CallContext" 項目 (型別為 LogicalCallContext)。訊息接收在通過訊息接收鏈結時,可加入並查詢 __CallContext 中的項目。

應用程式定義域界限處會複製呼叫內容。公開 ILogicalThreadAffinative 介面的物件會傳播到應用程式定義域外,並加入至接收者的執行緒。不支援這個介面的物件則不會傳播到應用程式定義域外。

CallContext 提供呼叫路徑的資料插槽。CallContext.SetDataCallContext.GetData 可用來管理應用程式碼中的呼叫內容插槽。每個呼叫路徑都會有唯一的資料插槽;也就是說,呼叫路徑間不會共用狀態。這些插槽有名稱。這個名稱是用來存取資料插槽。您可以使用該名稱明確釋放插槽。

如需使用 CallContext 的遠端處理範例,請參閱遠端處理範例:CallContext

非同步和 CallContext

BeginInvoke 方法會將 CallContext 傳遞給伺服器。呼叫 EndInvoke 方法時,CallContext 會合併回執行緒中。這包含的情況有依序呼叫 BeginInvokeEndInvoke 的情況,以及在某個執行緒上呼叫 BeginInvoke,而在 callback 函式上呼叫 EndInvoke 的情況。

當目前執行緒上的 CallContextEndInvoke 所提供的 CallContext 都有 CallContext 項目時,EndInvoke 中的項目會覆寫該執行緒之 CallContext 中的項目。

內容相關的靜態欄位

內容相關的靜態欄位提供與內容相關的欄位。只要從特定內容中存取靜態欄位,這個值就會與該內容相關;內容之間不會共用這個欄位。如果是在另一個內容中存取靜態欄位,則欄位會包含不同的值。

若要使用內容相關的靜態欄位,只需要將 ContextStaticAttribute 屬性套用至 ContextBoundObject 物件的欄位中。

請參閱

參考

CallContext

概念

遠端處理範例:CallContext

其他資源

CallContext 和直接遠端處理
進階遠端處理