共用方式為


設定訊息流程追蹤

啟用 Windows Communication Foundation (WCF) 活動追蹤時,就會為整個 WCF 堆疊的邏輯活動指派端對端活動識別碼。 在 .NET Framework 4.6.1 中,此功能現在有較高的效能版本,可與 Windows 事件追蹤 (ETW) 稱為訊息流程追蹤。 啟用之後,就會取得傳入訊息的端對端活動識別碼 (若是空的則會指派),並且傳播給在通道將訊息解碼之後發出的所有追蹤事件。 在解碼之後,客戶可以使用這項功能,利用來自不同服務的追蹤記錄重新建構訊息流程。

偵測到應用程式的問題之後,可以啟用追蹤,等到問題解決再停用追蹤。

啟用追蹤

若要啟用訊息流程追蹤,請將 .NET Framework 4 messageFlowTracing 組態項目設定為 true,如以下範例所示。

<system.servicemodel>  
  <diagnostics>  
    <endToEndTracing propagateActivity="true" messageFlowTracing="true" />  
  </diagnostics>  
</system.servicemodel>  

注意

由於 endToEndTracing 組態項目位於 Web.config 檔案中,所以不能像 ETW 那樣利用動態方式設定。 應用程式必須先進行回收,endToEndTracing 組態項目才會生效。

活動會透過交換識別碼 (稱為活動識別碼) 建立相互關聯。 這個識別碼是 GUID,由 System.Diagnostics.CorrelationManager 類別所產生。 如果您要操作 System.Diagnostics.Trace.CorrelationManager.ActivityID,請確定此值在執行控制權傳回給 WCF 程式碼時設定為原始值。 此外,如果您要使用非同步 WCF 程式撰寫模型,請確定 System.Diagnostics.Trace.CorrelationManager.ActivityID 會在執行緒之間傳輸。

訊息流程追蹤和 REST 服務

訊息流程追蹤可讓您端對端地追蹤要求。 透過 SOAP 服務,在 SOAP 訊息標頭中傳送活動 ID。 REST 要求不包含此標頭,因此會改用特殊 HTTP 事件標頭。 下列程式碼片段顯示如何以程式設計方式擷取活動 ID 值:

Object output = null;
if (OperationContext.Current.IncomingMessageProperties.TryGetValue(HttpRequestMessageProperty.Name, out output))
{
   HttpRequestMessageProperty httpHeaders = output as HttpRequestMessageProperty;
   // Retrieve the Activity Id from the HTTP header    string e2eId = httpHeaders.Headers["E2EActivity"];
   // ...
}

您可以使用下列程式碼,以程式設計方式加入標頭:

HttpContent content = new StreamContent(contentStream);  
Guid correlation = Guid.NewGuid();  
content.Headers.Add("E2EActivity", Convert.ToBase64String(correlation.ToByteArray()));