SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

サービスコンポーネントのさまざまな配置方法

COM+サービスを.NET Frameworkのクラスで利用できるようにする

サービスコンポーネントのさまざまな配置方法(中編)

ライブラリアプリケーションにサービスコンポーネントを配置する

 まず、Visual Studio .NETで[File]メニューの[New Project]を選択して新しいプロジェクトを作成します。次の画面に示すように、[New Project]ダイアログボックスで、プロジェクトの種類としてVisual C#クラスライブラリを選択し、プロジェクトの名前として「LibraryApp」と入力します。

 プロジェクトを作成できたら、既定クラス(Class1)の名前を「SampleLibrary」に変更し、次のように修正します。COM+に用意されているサービスを利用するために、SampleLibraryクラスをServicedComponentクラスから派生させるようにします。

public class SampleLibrary : ServicedComponent
{
      public SampleLibrary()
      {
      }
      public string WriteMessage()
      {
             return "This message is from a library application";
      }
}

 ここでは、文字列を返すWriteMessageという非常に簡単なメソッドを用意しています。

 次に、snユーティリティを使ってキーファイルを生成します。キーファイルを生成するには、Visual Studio .NETコマンドプロンプトで次のコマンドを入力します。

 キーファイルを生成できたら、そのキーファイルをプロジェクトに追加します。さらに、「AssemblyInfo.cs」ファイルに次の行を追加します。

[assembly: AssemblyKeyFile("..\\..\\LibraryApp.snk")]
[assembly: ApplicationName("LibraryApp")]
[assembly: ApplicationActivation(ActivationOption.Library)]
[assembly: Description("This is a library application")]

 このコードについて詳しく説明しましょう。

  • ApplicationName
  • COM+アプリケーションを作成する場合に使う名前を指定します。
  • ApplicationActivation
  • サービスコンポーネントをアクティブ化する方法(インプロセスまたはアウトオブプロセス)を指定します。ここでは、値ActivationOption.Libraryを指定して、サービスプロセスをクライアントのプロセス空間でアクティブ化することを指定しています。
  • Description
  • アセンブリの説明を入力します。

 サービスコンポーネントをコンパイルしたら、COM+にアセンブリを配置する必要があります。配置するには、コマンドラインから次のようにサービスインストールユーティリティ「regsvcs.exe」を実行します。

regsvcs LibraryApp.dll

 このコマンドラインユーティリティを実行すると、基本的に次の処理が行われます。

  • まず、CLRアセンブリがCOMコンポーネントとして登録されます(アセンブリ登録ユーティリティ「regasm.exe」を実行した場合と同じです)。
  • COMタイプライブラリが生成され(タイプライブラリエクスポータ「tlbexp.exe」を実行した場合と同じです)、そのタイプライブラリを使って、アセンブリ内の設定済みクラスがCOM+カタログに配置されます。
  • 次に、既定で、アセンブリのApplicationName属性とApplicationActivation属性に指定されているターゲットアプリケーションが作成されます。
  • 最後に、.NETのReflection APIを使って、アセンブリ内の設定済みクラスのメタデータが取り出され、その情報に従って、各クラスに適切な宣言属性が設定されるようにCOM+カタログが更新されます。設定済みクラスで宣言属性が具体的に指定されていない場合は、既定値が使用されます。

 regsvcsユーティリティを実行したら、コンポーネントサービスエクスプローラを起動して、コンポーネントがCOM+に正しくインストールされていることを確認します。

 この画面からお分かりのように、「AssemblyInfo.cs」ファイルでの指定どおりにLibraryAppという新しいライブラリアプリケーションが作成され、LibraryAppライブラリアプリケーションの内側にLibraryAppコンポーネントがインストールされています。このサービスコンポーネントをテストするため、簡単なVisual C# Windowsアプリケーションを作成してメソッドを呼び出してみましょう。

サービスコンポーネントのクライアントアプリケーション

 クライアントアプリケーションの名前を「LibraryAppClient」とし、既定フォーム「Form1.cs」にコマンドボタンを追加します。次に、[Add Reference]オプションを使って、LibraryAppアセンブリの参照を追加します。

 さらに、ファイルの先頭に次のステートメントを追加して、必要な名前空間の参照をインポートします。

using LibraryApp;

 コマンドボタンのクリックイベントに、次のコード行を書きます。

private void btnInvoke_Click(object sender, System.EventArgs e)
{
      SampleLibrary obj = new SampleLibrary();
      MessageBox.Show(obj.WriteMessage());
}

 アプリケーションを実行してコマンドボタンをクリックすると、表示されているサービスコンポーネントから返されたメッセージが表示されます。

 COM+でライブラリアプリケーションにサービスコンポーネントを配置する方法の説明はこれで終わりにし、次は、サーバーアプリケーションの一部としてサービスコンポーネントを配置する方法を解説します。

サーバーアプリケーションにサービスコンポーネントを配置する

 既に説明したとおり、サーバーアプリケーションに配置したサービスコンポーネントは、常にCOM+実行可能ファイル「dllhost.exe」のアドレス空間でアクティブ化されます。さらに、サービスコンポーネントは(COM+サーバーアプリケーションに配置する場合は)GACにも配置する必要があります。これは、COM+が、クライアントが実際に実行されているディレクトリに関係なく、アセンブリをロードできるようにするためです。この例では、次のように、「ServerApp」という新しいVisual C#クラスライブラリアプリケーションを作成します。

 プロジェクトを作成したら、既定クラスの名前を「SampleServer」に変更し、次のコード行を追加します。

public class SampleServer : ServicedComponent
{
      public SampleServer()
      {
      }
      public string WriteMessage()
      {
             return "This message is from a server application";
      }
}

 前述の例と同じように、キーファイル「ServerApp.snk」を作成してプロジェクトに追加します。次に、「AssemblyInfo.cs」ファイルに次の行を追加します。

[assembly: ApplicationName("ServerApp")]
[assembly: Description("This is a server application")]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: AssemblyKeyFile("..\\..\\ServerApp.snk")]

 ここでは、ApplicationActivation属性をActivationOption.Serverとして、このアセンブリをCOM+の実行可能プロセスでアクティブ化することを指定しています。これで、必要なオプションをすべて指定できたので、コンポーネントのコンパイルに進み、アセンブリを生成します。アセンブリを生成できたら、「gacutil.exe」ユーティリティを使ってGACにアセンブリをインストールします。アセンブリをインストールするには、アセンブリの名前とコマンドスイッチiを引数としてgacutilユーティリティに渡します。

gacutil -i ServerApp.dll

 GACにアセンブリをインストールできたら、regsvcsユーティリティを実行してCOM+にコンポーネントを登録します。

regsvcs ServerApp.dll

 これで、アセンブリを配置できました。クライアントアプリケーションを作成し、配置したアセンブリにあるクラスのメソッドをテストしてみましょう。

サービスコンポーネントのクライアントアプリケーション

 まず、「ServerAppClient」という新しいVisual C# Windowsアプリケーションを作成し、「Form1.cs」ファイルに次のコード行を追加します。

using ServerApp;
private void cmdServerApp_Click(object sender, System.EventArgs e)
{
      SampleServer obj = new SampleServer();
      MessageBox.Show(obj.WriteMessage());
}

 アプリケーションを実行してコマンドボタンをクリックすると、サービスコンポーネントから返されたメッセージが表示されます。

次のページ
サービスコンポーネントのさまざまな配置方法(後編)

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Thiru Thangarathinam(Thiru Thangarathinam)

オブジェクト指向アプリケーション開発方法論を用いたアプリケーションのアーキテクチャ設計、設計、開発、および実装に関して約6年の経験を持つ。ソフトウェアライフサイクル(設計、開発およびテスト)にも精通。ASP.NET、.NET Framework、Visual C#.NET、Visual Basic.NET、ADO.NET、XML Webサービス、および.NET Remotingのエキスパートであり、MCAD...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/364 2006/08/22 15:45

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー