次の方法で共有


CallContext の使用

呼び出しコンテキストは、実行コード パスによって搬送される一連のプロパティを提供します。CallContext クラスのインスタンスが実行コード パスを通過するときには、このインスタンスにエントリを追加できます。

CallContext オブジェクトは、コンテキスト間やアプリケーション ドメイン間を移動するときに、"__CallContext" エントリ (型は LogicalCallContext) 内の IMessage 実装で渡されます。メッセージ シンクは、__CallContext がメッセージ シンク チェーンを通過するときに、__CallContext にエントリを追加したり、エントリを検索したりできます。

呼び出しコンテキストは、アプリケーション ドメインの境界で複製されます。ILogicalThreadAffinative インターフェイスを公開するオブジェクトは、アプリケーション ドメインの外部に反映され、受信側のスレッドに追加されます。このインターフェイスをサポートしないオブジェクトは、アプリケーション ドメインの外部に反映されません。

CallContext は、呼び出しパスのデータ スロットを提供します。CallContext.SetData および CallContext.GetData を使用して、アプリケーション コードで呼び出しコンテキスト スロットを管理できます。データ スロットは呼び出しパスごとに一意であり、そのため、状態は呼び出しパスを越えては共有されません。スロットは名前付きです。この名前は、データ スロットにアクセスするために使用されます。スロットは、名前を使用して明示的に解放できます。

CallContext を使用したリモート処理の例については、「リモート処理の例 : CallContext」を参照してください。

Async および CallContext

BeginInvoke メソッドは、CallContext をサーバーに渡します。EndInvoke メソッドが呼び出されると、CallContext はスレッドに戻されます。これには、BeginInvokeEndInvoke が連続して呼び出される場合や、BeginInvoke が 1 つのスレッドで呼び出され、EndInvoke がコールバック関数で呼び出される場合も含まれています。

CallContext のエントリが、現在のスレッドの CallContext と、EndInvoke によって提供された CallContext の両方に共通な場合は、EndInvoke のエントリがスレッドの CallContext のエントリを上書きします。

コンテキスト相対静的フィールド

コンテキスト相対静的フィールドは、コンテキストに対して相対的なフィールドを規定します。特定のコンテキストが静的フィールドにアクセスした場合、値は常にそのコンテキストに相対的で、フィールドは複数のコンテキスト間で共有されません。その静的フィールドが別のコンテキストでアクセスされると、フィールドには別の値が格納されます。

コンテキスト相対静的フィールドを使用するには、ContextBoundObject オブジェクトのフィールドに ContextStaticAttribute 属性を適用します。

参照

関連項目

CallContext

概念

リモート処理の例 : CallContext

その他の技術情報

CallContext と直接リモート処理
高度なリモート処理