本主題描述 Windows Communication Foundation (WCF) 追蹤模型中的活動傳播。
使用傳播將端點間的活動相互關聯
傳播可讓使用者直接相互關聯跨應用程式端點處理相同單位的錯誤追蹤,例如要求。 針對相同處理單位在不同端點發出的錯誤會分組在同一個活動中,即使是跨應用程式域也一樣。 這是透過傳播訊息標頭中的活動標識碼來完成。 因此,如果客戶端因伺服器內部錯誤而逾時,這兩個錯誤都會出現在相同的活動中以進行直接相互關聯。
若要這樣做,請使用 ActivityTracing
如上一個範例所示的設定。 此外,在所有端點上設定propagateActivity
System.ServiceModel
追蹤來源的屬性。
<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity="true" >
活動傳播是可設定的功能,可讓 WCF 在輸出訊息中新增標頭,包含 TLS 中的活動 ID。 藉由在伺服器端的後續追蹤上加入此功能,我們可以將客戶端和伺服器活動相互關聯。
傳播定義
如果適用下列所有條件,活動 M 的 gAId 就會傳播到活動 N。
因為 M 而建立 N
M 的 gAId 已知為 N
N 的 gAId 等於 M 的 gAId。
gAId 會透過ActivityId訊息標頭傳播,如下列 XML 架構所示。
<xsd:element name="ActivityId" type="integer" minOccurs="0">
<xsd:attribute name="CorrelationId" type="integer" minOccurs="0"/>
</xsd:element>
以下是訊息標頭的範例。
<MessageLogTraceRecord>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://Microsoft.ServiceModel.Samples/ICalculator/Subtract
</a:Action>
<a:MessageID>urn:uuid:f0091eae-d339-4c7e-9408-ece34602f1ce
</a:MessageID>
<ActivityId CorrelationId="aaaa0000-bb11-2222-33cc-444444dddddd"
xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">
17f59a29-b435-4a15-bf7b-642ffc40eac8
</ActivityId>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">net.tcp://localhost/servicemodelsamples/service</a:To>
</s:Header>
<s:Body>
<Subtract xmlns="http://Microsoft.ServiceModel.Samples">
<n1>145</n1>
<n2>76.54</n2>
</Subtract>
</s:Body>
</s:Envelope>
</MessageLogTraceRecord>
傳播和活動界限
當活動標識碼傳播到端點時,訊息接收者會發出具有該(傳播)活動標識符的開始和停止追蹤。 因此,每個追蹤來源都有具有該 gAId 的開始和停止追蹤。 如果端點位於相同的進程中,並使用相同的追蹤來源名稱,則會使用相同的 lAId 建立多個 Start 和 Stop(相同的 gAId、相同的追蹤來源、相同的進程)。
同步
若要在不同的設備上執行的端點間同步事件,會將 CorrelationId 新增至訊息中傳播的 ActivityId 標頭。 工具可以使用此標識碼,在時鐘不一致的情況下跨設備同步事件。 具體而言,服務追蹤查看器工具會使用此標識符來顯示端點之間的訊息流程。