使用 CallContext
呼叫內容提供隨執行程式碼路徑攜帶的一組屬性。CallContext 類別的執行個體在執行程式碼路徑中往下和往回移動時,會逐漸加入項目。
CallContext 物件在內容與應用程式定義域之間流動時,會傳入至 IMessage 實作中的 "__CallContext" 項目 (型別為 LogicalCallContext)。訊息接收在通過訊息接收鏈結時,可加入並查詢 __CallContext 中的項目。
應用程式定義域界限處會複製呼叫內容。公開 ILogicalThreadAffinative 介面的物件會傳播到應用程式定義域外,並加入至接收者的執行緒。不支援這個介面的物件則不會傳播到應用程式定義域外。
CallContext 提供呼叫路徑的資料插槽。CallContext.SetData 和 CallContext.GetData 可用來管理應用程式碼中的呼叫內容插槽。每個呼叫路徑都會有唯一的資料插槽;也就是說,呼叫路徑間不會共用狀態。這些插槽有名稱。這個名稱是用來存取資料插槽。您可以使用該名稱明確釋放插槽。
如需使用 CallContext 的遠端處理範例,請參閱遠端處理範例:CallContext。
非同步和 CallContext
BeginInvoke 方法會將 CallContext 傳遞給伺服器。呼叫 EndInvoke 方法時,CallContext 會合併回執行緒中。這包含的情況有依序呼叫 BeginInvoke 和 EndInvoke 的情況,以及在某個執行緒上呼叫 BeginInvoke,而在 callback 函式上呼叫 EndInvoke 的情況。
當目前執行緒上的 CallContext 和 EndInvoke 所提供的 CallContext 都有 CallContext 項目時,EndInvoke 中的項目會覆寫該執行緒之 CallContext 中的項目。
內容相關的靜態欄位
內容相關的靜態欄位提供與內容相關的欄位。只要從特定內容中存取靜態欄位,這個值就會與該內容相關;內容之間不會共用這個欄位。如果是在另一個內容中存取靜態欄位,則欄位會包含不同的值。
若要使用內容相關的靜態欄位,只需要將 ContextStaticAttribute 屬性套用至 ContextBoundObject 物件的欄位中。