このトピックでは、Windows Communication Foundation (WCF) トレース モデルでのアクティビティ伝達について説明します。
伝達を使用してエンドポイント間でアクティビティを関連付ける
伝達により、アプリケーション エンドポイント間で同じ処理単位 (要求など) のエラー トレースが直接関連付けられます。 同じ処理単位の異なるエンドポイントで生成されたエラーは、アプリケーション ドメイン間でも同じアクティビティにグループ化されます。 これは、メッセージ ヘッダー内のアクティビティ ID の伝達によって行われます。 そのため、サーバー内の内部エラーが原因でクライアントがタイムアウトした場合、両方のエラーが直接関連付けのために同じアクティビティに表示されます。
これを行うには、前の例で示したように、 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 と等しくなります。
次の XML スキーマに示すように、gAId は ActivityId メッセージ ヘッダーを介して伝達されます。
<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>
伝達とアクティビティの境界
アクティビティ ID がエンドポイント間で伝達されると、メッセージ レシーバーは、その (伝達された) アクティビティ ID を持つ Start トレースと Stop トレースを出力します。 そのため、各トレース ソースのその gAId を持つ開始トレースと停止トレースがあります。 エンドポイントが同じプロセスにあり、同じトレース ソース名を使用している場合は、同じ lAId (同じ gAId、同じトレース ソース、同じプロセス) を持つ複数の Start と Stop が作成されます。
同期化
異なるマシンで実行されるエンドポイント間でイベントを同期するために、メッセージに伝達される ActivityId ヘッダーに CorrelationId が追加されます。 ツールでは、この ID を使用して、クロックの不一致があるマシン間でイベントを同期できます。 具体的には、サービス トレース ビューアー ツールは、エンドポイント間のメッセージ フローを表示するためにこの ID を使用します。