次の方法で共有


アクティビティ ID の伝達

伝達は、ServiceModel アクティビティ トレースが有効 (ServiceModel 伝達) または無効 (ユーザー間アクティビティの伝達) に発生します。

ServiceModel アクティビティ トレースが有効になっている

ServiceModel ActivityTracing が有効になっている場合、ProcessAction アクティビティ間で伝達が行われます。

サーバー

propagateActivity属性がクライアントとサーバーの両方でtrueに設定されている場合、サーバー内のProcessAction アクティビティの ID は、伝達されたActivityId メッセージ ヘッダーの ID と同じです。

メッセージに ActivityId ヘッダーがない場合 (つまり、クライアント上の propagateActivity=false )、またはサーバーで propagateActivity=false すると、サーバーは新しいアクティビティ ID を生成します。

顧客

クライアントが同期的にシングル スレッドの場合、クライアントはクライアントまたはサーバーで propagateActivity の設定を無視します。 代わりに、応答は要求アクティビティで処理されます。 クライアントが非同期または同期マルチスレッドで、クライアントで propagateActivity=true し、サーバーによって送信されたメッセージにアクティビティ ID ヘッダーがある場合、クライアントはメッセージからアクティビティ ID を取得し、伝達されたアクティビティ ID を含むプロセス アクション アクティビティに転送します。 それ以外の場合、クライアントはプロセス メッセージ アクティビティから新しいプロセス アクション アクティビティに転送します。 この新しいプロセス アクション アクティビティへの追加の転送は、一貫性のために行われます。 このアクティビティ内では、クライアントは、応答メッセージ処理用にスレッドが割り当てられているときに、ローカル スレッド コンテキストから BeginCall アクティビティのアクティビティ ID を取得します。 その後、最初のプロセス アクション アクティビティに転送されます。

クライアントが双方向の場合、クライアントはメッセージの受信時にサーバーとして機能します。

障害メッセージの拡散

有効なメッセージとエラー メッセージの処理に違いはありません。 propagateActivity = true場合、SOAP エラー メッセージ ヘッダーに追加されるアクティビティ ID はアンビエント アクティビティと同じです。

ServiceModel アクティビティ トレースが無効になっている

ServiceModel ActivityTracing が無効になっている場合、ServiceModel アクティビティを経由することなく、ユーザー コード アクティビティ間で直接伝達が行われます。 ユーザー定義のアクティビティ ID も、メッセージ アクティビティ ID ヘッダーを介して伝達されます。

ServiceModel トレース リスナーの propagateActivity=trueActivityTracing=off 場合 (ServiceModel でトレースが有効になっているかどうかに関係なく)、クライアントまたはサーバーで次のことが行われます。

  • 操作要求または応答の送信時に、TLS のアクティビティ ID は、メッセージが形成されるまでユーザー コードから伝達されます。 アクティビティ ID ヘッダーも、送信前にメッセージに挿入されます。

  • 要求の受信時または応答の受信時に、受信したメッセージ オブジェクトが作成されるとすぐに、アクティビティ ID がメッセージ ヘッダーから取得されます。 TLS のアクティビティ ID は、ユーザー コードに達するまで、メッセージがスコープから消えたらすぐに伝達されます。

このアクションによって、伝達が有効な場合にユーザー トレースが同じアクティビティに表示されることが保証されます。 ただし、ServiceModel トレースは保証の対象ではありません。 ServiceModel トレースは、ユーザー コード アクティビティが設定されたのと同じスレッドでこれらのトレースの処理が実行される場合にのみ、ユーザー コード アクティビティで発生します。

一般に、ServiceModel トレースは次の場所で確認できます。

  • ServiceModel トレースが無効になっている場合、出力されたすべてのトレースがユーザー アクティビティに表示されます。 サーバーとクライアントの両方で伝達が有効になっている場合、これらのトレースは同じアクティビティになります。

  • ServiceModel トレースが有効になっていて、ActivityTracing が無効になっている場合、両方の側で伝達が有効になっている場合、ユーザー トレースは同じアクティビティに表示されます。 ServiceModel トレースは、アクティビティが最初に設定されているユーザー コード処理と同じスレッドで発生しない限り、既定の 0000 アクティビティに表示されます。

  • ServiceModel トレースと ActivityTracing の両方が有効になっている場合、ユーザートレースはユーザー定義アクティビティに表示され、ServiceModel トレースは ServiceModel 定義アクティビティに表示されます。 伝達は ServiceModel レベルで行われます。