初めて作る.NET WindowsサービスVisual Studio Magazine(1/7 ページ)

特にUIを持たずWindowsのバックグラウンドで動作する「Windowsサービス」。この特集では、実践的な開発手法レクチャーとして、.NETアプリケーションにモニタリング機能を提供するWindowsサービス作成方法を解説していく。

» 2005年02月01日 18時49分 公開
[Doug Thews,FTPOnline]

 Visual Studio Magazine誌は、米国でVS専門誌ナンバーワンの発行部数を誇る。ITmediaでは、発行元FTP Onlineから翻訳権を取得。米国発でホットな話題をピックアップし、月に2つの特集を定期掲載している。

 今回は、.NET Framework上でも基本として取り上げられることの多いWindowsサービスの作成方法についてだ。レガシーなものとして軽視しがちだが、実例サンプルを挙げてより具体的な手法を解説していく。

取り上げるテクノロジー::VB.NET

 従来、C++やMFCプログラマの領域であった「Windowsサービス」は、現在、.NETアプリケーションの基本技法のひとつとして使えるようになった。

 データベースレベルのコードをデータベース層へ移すのとよく似た方法であり、アプリケーションが提供する中心となる機能(例えばデータベースのコネクションプーリングやイベントログ、監査など)を実装し、Windowsサービスとして配置できる。これは、どのような.NETアプリケーションでも可能であり、冗長なコードによってアプリケーションが膨れあがってしまうこともない。

 いくつかのアプリケーションに共通となる機能をWindowsサービスとして実装し、アプリケーションからの「機能提供(service)」(例えば「メッセージの取り出しやデータベースコネクションの取得)への要求に受け応えるようにするのは良い考えだ。場合によっては、共通機能をもつコードをGAC(Global Assembly Cache)の名前空間に入れたいと思うかもしれない。

 この特集では、Visual Studio .NET 2003を使い、Windowsサービスを作成する手ほどきを解説していく。サンプルとして、読者の.NETデスクトップアプリケーションをモニタリングする簡単なサービスの作り方をお見せしよう。なお、本稿の意図では、「モニタリング」とは「すべてのセキュリティアプリケーションにとって必要となる重大なセキュリティイベント(例えば「門の開閉」「火災警報機のオンオフ」「スプリンクラーのオンオフ」など)を確認できる仕組み」と定義する。


 モニタリングサービスでは、すべてのアプリケーションがこれらのイベントを通知できるようにし、そのイベントをログとして記録可能にする(ここでのイベントとはWindowsのイベントログには限らず、より一般的なセキュリティ要件のことである)。そしてさらに、デスクトップアプリケーションがサービスと通信できる機能も提供する。

 Windowsサービスは、ユーザーが気に留めない状態で実行するプロセスであり、ユーザーインタフェースを持たない。Windowsサービスは、Windows NT、Windows 2000、Windows XP、Windows Server 2003において利用可能だ。Windowsサービスは自身のプロセス空間で実行され、OSのブートプロセス中に開始するよう構成ができる。また、ほかのデスクトップアプリケーションと対話できるようにしたければ、そのように構成することも可能だ。

 モニタリング機能を実現するには、2つの方法が考えられる。

 第1の方法は、サービスにおいてそれぞれのアプリケーションをポーリングするというものだ。この方法は、モニタリング活動していない時でも、ポーリングによって多くのプロセス時間が消費されてしまうというのが難点だ(訳注:ポーリング(polling)とは、ループ処理などを使って、常時何か事が起きていないかを監視する処理を表現する)。

 第2の方法として挙げられるのが、イベントモデルを使うというものだ。それぞれのアプリケーションをモニタリングサービスに登録しておき、何か事が起きたらモニタリングイベントを送信するようにする。

 本稿では、イベントモデルを使う方法を説明していく。

       1|2|3|4|5|6|7 次のページへ

© Copyright 2001-2005 Fawcette Technical Publications

注目のテーマ