[BUG] サービス コンポーネントを新規作成すると CallContext オブジェクトが失われる

この記事は、以前は次の ID で公開されていました: JP319177
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
クライアント アプリケーションで、サービス コンポーネントのインスタンスを作成する前に CallContext オブジェクトが設定されている場合、オブジェクトのインスタンスを作成すると CallContext オブジェクトが失われる場合があります。
原因
この問題は、CallContext に格納されているオブジェクトが ILogicalThreadAffinative インターフェイスから派生している場合に発生します。CallContext.SetData メソッドを使用して、これらのオブジェクトを CallContext に格納し、次に ServicedComponent オブジェクトのインスタンスを作成すると、オブジェクトの CallContext.GetData メソッドは Null を返します。
解決方法
この問題を回避するには、次のいずれかの方法を実行します。
  • アプリケーションの内部でのみ CallContext のアイテムを使用する必要がある場合は、これらのアイテムを ILogicalThreadAffinative から派生させないようにします。

    : リモート システムは AppDomain を越えてこれらのオブジェクトを渡すことはありません。
  • リモート サーバーで ServicedComponent オブジェクトを使用し、それらのオブジェクトに CallContext を送信したい場合は、アイテムを CallContext の中に格納する前に ServicedComponent のインスタンスを作成する必要があります。

    これが行えない場合は、ServicedComponent のインスタンスを作成する前に CallContext の内容をいったん保存しておき、その後内容を再度読み込みます。
: ServicedComponent アプリケーションで CallContext 機能を利用することはできません。マイクロソフトでは、ServicedComponent オブジェクトからの CallContext の使用はサポートしていません。
状況
マイクロソフトでは、この問題をこの資料の冒頭に記載したマイクロソフト製品の問題として認識しています。この問題は、Microsoft .NET Framework Service Pack 2 (SP2) で修正されています。Service Pack の詳細については、以下のサポート技術情報を参照ください。
318836 [INFO] 最新の .NET Framework Service Pack の入手方法
詳細
CallContext を使用することによって、チャネル経由で情報をクライアントからサーバーへ、または逆方向に送信することができます。CallContext は、実行コードのパス (コール チェーン) と共に送信される一連のプロパティを提供します。

この問題は、CallContext オブジェクトの中のすべてのヘッダーでも発生します。

問題の再現手順

  1. CallContext に格納するクラス インスタンスを定義します。
    [Serializable]public class CtxObject : ILogicalThreadAffinative{	public string CtxString;	public CtxObject(){CtxString = "Some String" ;}}
  2. オブジェクトの 1 つを CallContext データ スロットに格納し、次に ServicedComponent のインスタンスを作成します。
    // Create CallContext object.CtxObject CtxObj = new CtxObject () ;                     // Set it in the CallContext.CallContext.SetData ("CtxObject", CtxObj) ;// Create the serviced component.MyServicedComponent MyObj = new MyServicedComponent () ;  // Retrieve the CallContext object (returns null).CtxObject CtxObj1 = (CtxObject) CallContext.GetData ("CtxObject") ;  
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 319177 (最終更新日 2002-08-6) をもとに作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。

instantiate
プロパティ

文書番号:319177 - 最終更新日: 01/17/2015 16:36:57 - リビジョン: 4.0

  • Microsoft .NET Framework クラス ライブラリ 1.1
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft .NET Framework Service Pack 2
  • kbnosurvey kbarchive kbbug kbfix kbremoting KB319177
フィードバック