更新 : 2007 年 11 月
このサンプルでは、.NET Framework 環境での Just-In-Time (JIT) アクティベーションおよびオブジェクト プーリングの使用例を示します。サーバー アプリケーションにはプールされた 1 つのオブジェクトがあり、このオブジェクトは 1 つのログ ファイルを表します。個々のクライアント アプリケーションでは、JIT アクティベーションを有効にし、1 つのオブジェクトにおける最大のプール サイズを指定した状態で、プールされたオブジェクト クラスのインスタンス作成と呼び出しを行っています。このように、すべてのクライアント呼び出しは、1 つのオブジェクト インスタンス経由で送られます。この結果、1 つのログ ファイルに、COM+ の動作と複数クライアントの呼び出しが記録されます。
サンプルの使用については、次のトピックを参照してください。
コマンド プロンプトを使用してサンプルをビルドするには
コマンド プロンプト ウィンドウを開き、Technologies\ComponentServices\ObjectPooling ディレクトリにある、言語固有のサブディレクトリのいずれかに移動します。
プログラミング言語の選択に応じて、コマンド ラインで、「msbuild ObjectPoolingCS.sln」または「msbuild ObjectPoolingVB.sln」と入力します。
Visual Studio を使用してサンプルをビルドするには
Windows エクスプローラを開き、ObjectPooling ディレクトリにある、言語固有のサブディレクトリのいずれかに移動します。
使用しているプログラミング言語に応じて、ObjectPoolingCS.sln または ObjectPoolingVB.sln ファイルのアイコンをダブルクリックして、このファイルを Visual Studio で開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。OPDemoSvr.dll のアセンブリおよび OPDemo.exe のアセンブリは、既定の \bin ディレクトリまたは \bin\Debug ディレクトリにビルドされます。
アセンブリを GAC に登録およびインストールするには
ビルドしたアセンブリ ファイルが格納されているディレクトリに移動します。
コマンド ラインで「regsvcs OPDemoSvr.dll」と入力して、アセンブリを登録します。
コマンド ラインで「gacutil –i OPDemoSvr.dll」と入力して、アセンブリをグローバル アセンブリ キャッシュ (GAC: Global Assembly Cache) に登録します。
サンプルを実行するには
コマンド プロンプト ウィンドウまたは Windows エクスプローラを開き、新しい実行可能ファイルが格納されているディレクトリに移動します。
[すべてのプログラム] メニューの [管理ツール] サブメニューで、コンポーネント サービス管理ツールを開きます。
COM+ エクスプローラの左ペインで、コンポーネント サービス\コンピュータ\マイ コンピュータ\COM+ アプリケーションを展開し、OPDemoSvr COM+ アプリケーションを探します。
OPDemoSvr\コンポーネントを展開し、Microsoft.Samples.Technologies.ComponentServices.ObjectPooling.PooledLogFile コンポーネントを探します。PooledLogFile コンポーネントを右クリックし、ポップアップ メニューの [プロパティ] をクリックします。[アクティブ化] タブをクリックし、オブジェクト プーリングが有効になっていることを確認します。
メモ :このコンポーネントは、最小プール サイズがゼロ、最大プール サイズが 1 に設定してあります。これは、クライアント コードからインスタンス化されるオブジェクトの数にかかわりなく、プールされるオブジェクトは常に最大 1 つであることを意味します。この属性は、サンプル コードで ObjectPoolingAttribute を使用して明示的に設定してあります。作成時のタイムアウト時間には既定の 60 秒が適用されます。これはサンプル コードで別の値を明示的に指定していないためです。
オブジェクト構築の編集フィールドの内容を確認してください。このフィールドには、サンプルでプールされたオブジェクトによって作成される、ディスク上のログ ファイルの名前が入っています。既定値は、OPSvrLogCS.txt または OPSvrLogVB.txt です。この名前は変更できます。また、C:\OPSvrLogCS.txt のように、ファイル名にパス情報を追加することもできます。ファイル名にパス情報を追加しなかった場合、ファイルは、現在のディレクトリである System32 ディレクトリに作成されます。
[OK] をクリックして、OPDemoServer コンポーネントの [プロパティ] ダイアログ ボックスを閉じます。
Windows エクスプローラまたはコマンド プロンプト ウィンドウから、OPDemo.exe を 3 つ起動します。たとえば、コマンド プロンプト ウィンドウの場合は、C:\Documents and Settings\Your User Name\My Documents\Samples\Technologies\ComponentServices\ObjectPooling\VB\ObjectPooling\bin ディレクトリに移動し、「opdemo.exe」と 3 回入力します。
各クライアント アプリケーションで、[Start Writing] ボタンをクリックします。クライアント ウィンドウに、点滅するアスタリスクが表示されます。これは、OPDemoServer コンポーネントのオブジェクト構築文字列で指定したログ ファイルに、エントリが書き込まれていることを示しています。
すべてのクライアント アプリケーションで書き込みが始まったら、数秒間待機します。各クライアント アプリケーションの [Stop Writing] ボタンをクリックします。
ログ ファイルを探し、メモ帳などのテキスト エディタで開きます。COM+ から IObjectControl への呼び出しを示す、一連のステートメントが記録されています。これらの呼び出しの中ほどに、各クライアント アプリケーションによって書き込まれたメッセージがあります (クライアント アプリケーションはプロセス ID によって識別できます)。このメッセージは、インスタンス化された 1 つのオブジェクトに対する、3 つのオブジェクト参照経由での呼び出しを、COM+ が調整したことを示しています。IObjectControl インターフェイスの詳細については、サンプル コード内のコメントおよびプラットフォーム SDK を参照してください。
メモ :ログ ファイルの名前を変更または削除するには、クライアント アプリケーションのインスタンスをすべて終了し、コンポーネント サービス管理ツールで OPDemoSvr アプリケーションを閉じる必要があります。これを行うには、COM+ エクスプローラの左ペインで COM+ アプリケーションを右クリックし、ポップアップ メニューの [シャットダウン] をクリックします。
必要条件
プラットフォーム : Windows 2000、Windows XP、Windows Server 2003
.NET Framework のバージョン : 2.0、1.1、1.0
解説
このサンプルでは、オブジェクト構築文字列を使用してログ ファイル名を指定し、必要に応じてその絶対パスを指定しています。Just-In-Time (JIT) アクティベーションは、COM+ サービスの 1 つです。このサービスによってクライアント アプリケーションは、実際にオブジェクト インスタンスが存在していなくても、オブジェクト参照を作成でき、必要な時間だけ保持できます。COM+ では、コンシューマがオブジェクト参照を通じてオブジェクトを呼び出すときに、ジャストインタイムでオブジェクトをアクティブにします。このアクティブ化処理によって、オブジェクト インスタンスが新規作成される場合もありますが、COM+ オブジェクト プーリングと一緒に使用する場合、プールされているオブジェクトへの参照を呼び出し元に渡します。COM+ では、オブジェクト コンテキストの処理状況ビットに基づいてオブジェクトを非アクティブにします。.NET サービス コンポーネントの場合は、AutoCompleteAttribute をクラス メソッドに適用できます。これは、メソッドを終了する際にオブジェクトを非アクティブにできることを示します。
C# コンポーネントの名前は、コンポーネント サービス管理ツールでの表示からわかるとおり、OPDemoServerCS.PooledLogFile です。Visual Basic バージョンは、OPDemoServerVB.PooledLogFile です。サンプルのバイナリ ファイルを作成する方法およびサンプルを登録する手順については、ソース コード ファイル内のコメントを参照してください。
メモ : |
|---|
サンプルを実行するには、グローバル アセンブリ キャッシュ ツール (Gacutil.exe) を利用して OPDemoSvr.dll のアセンブリをグローバル アセンブリ キャッシュにあらかじめインストールする必要があります。Gacutil.exe は SDK\<version number>\Bin ディレクトリにあります。 |
COM+ オブジェクト プーリングは、アクティブなオブジェクトのプールを管理し、プーリング用に構成されたコンポーネントがクライアント アプリケーションから要求された場合に、すぐに使用できるようにするサービスです。プールは、管理者が構成するか、ObjectPoolingAttribute を使用して構成します。プールの属性には、プールの最小サイズと最大サイズ、オブジェクト作成要求のタイムアウト値が含まれます。
JIT アクティベーションとオブジェクト プーリングが有効にしてあるコンポーネントでは、IObjectControl インターフェイスを実装することによって、コンポーネントの再利用方法を制御できます。IObjectControl メソッドは、COM+ からのみ呼び出されます。このメソッドで、オブジェクトをアクティブまたは非アクティブにする処理での重要なイベントを指定したり、オブジェクトをオブジェクト プールに戻せるかどうかを指定したりすることができます。このサンプルでは、COM+ で使用されているインターフェイスを示すためだけに IObjectControl を実装しています。JIT アクティベーションとオブジェクト プーリングの詳細については、プラットフォーム SDK を参照してください。
参照
参照
グローバル アセンブリ キャッシュ ツール (Gacutil.exe)