3.Windows Communication Foundation (マイクロソフト通信ライブラリ)

マイクロソフトの通信用ライブラリである Windows Communication Foundation (以下、WCFと略します)について説明していきます。

WCFは従来のソケット通信に比べて、より質の高い通信が行えるライブラリです。WCFの基本的な概念ABC(アドレス、バインディング、コントラクト)については、色んなサイトで紹介されているので、ここでは省略し、具体的にどのようにしてアプリ内へ組み込むのかをサンプルを交えて紹介したいと思います。

アグリモの製品では、ひかりFAX電話CTI、ひかり電話CTI、日報検索データベースの3つの製品で、サーバーとクライアント間の通信用として利用しています。主な用途は、ファイル転送とDB参照です。

サーバーとなるパソコンには、WCFをサービスとして、アプリとは独立してインストールして使用しています。このようにする理由は、WCFは管理者モードでないと起動できない点にあります。アプリを起動する度に管理者権限の要求画面が表示されては、アプリとしては少々問題です。

 

1.以下は、ひかりFAX電話CTIのソリューションです。赤枠内は、Windowsサービスアプリケーション(SmartConnectService_FAX)とWCFサービスライブラリ(SmartConnectServiceLibrary_FAX)、それにセットアッププロジェクト(Setup_SmartConnectService)です。

2.まず最初にWCFサービスライブラリを作成します。

3.新規のソリューションにWCFサービスライブラリのプロジェクトが追加されていますが、重要なのは、App.config、IService1.cs、Service1.cs の3つのファイルです。

App.config は、右クリックして「WCF構成の編集」で開くことができます。

設定すべきところは、「サービス」の中の「ホスト」と、その下の「エンドポイント」です。

「ホスト」は、「ベースアドレス」を編集します。

初期値は、http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/ となっていますので、「編集」をクリックして、自身のシステムに合うように変更します。

「エンドポイント」は、「(空白の名前)」というのが2つありますが、上の方(Addressがmexでない方)を設定します。ここでは、バインディング方式とコントラクトを自身のシステムに合うように変更します。

 

4.IService1.cs、Service1.cs については、前者がサービスのプロトタイプ宣言のようなもの、後者がサービスの中身といった感じです。説明するより見た方が早いので、実際のソースを貼り付けます。

 

5.次にソリューション内に「Windowsサービス(.NET Framework)」プロジェクトを追加します。

6.プロジェクト内の Service1.cs を開いて、右クリックして「インストーラーの追加」を選択します。

7.「serviceProcessInstaller1」のプロパティを開いて、「Account」を「LocalSystem」に変更します。

8.「serviceInstaller1」のプロパティを開いて、「DelayedAutoStart」を「True」、「StartType」を「Automatic」にそれぞれ変更します。

9.App.config を削除し、新たにWCFサービスライブラリ(例の場合は、WcfServiceLibrary1)プロジェクト内のApp.configへのリンクを追加します。

↓ 元のApp.config を削除

↓ WCFサービスライブラリ(例の場合は、WcfServiceLibrary1)プロジェクト内のApp.config を

↓ リンクとして追加します。

 

10.Service1.cs をコードで開いて、以下のサンプルのように変更します。(※サンプルは、ひかりFAX電話CTIスマートコネクトのものです。サービスが開始する時には、使用するポートをファイヤーウォール設定でオープンにし、サービスがストップする時にはクローズしています。※COMの NetFwTypeLib.dll 参照が必要です。)

 

11.ProjectInstaller.cs をコードで開いて、以下のサンプルのように変更します。(※サンプルは、ひかりFAX電話CTIスマートコネクトのものです。インストール直後にサービスを自動開始します。)

 

12.以上が出来たら、セットアッププロジェクトを作成して完成です。(※以下は、ひかりFAX電話CTIスマートコネクトの画面です。)

ファイルシステムの設定を追加します。

カスタム動作の設定を追加します。

13.クライアントからWCFサービスを通じて、サーバーのDBにアクセスするサンプルプログラムを以下に示します。