更新日: 2010 年 11 月 26 日

Visual Basic の内容はこちらに掲載しています。10 行でズバリ!! [VB] WCF サービスの作成と利用

このコンテンツのポイント

  • WCF サービスの作成
  • Windows アプリケーションからの WCF サービスの利用
  • Web アプリケーションからの WCF サービスの利用
  • Office アプリケーションからの WCF サービスの利用

今回紹介するコード

private void button1_Click(object sender, RoutedEventArgs e)
{
   var client = new TestService.Service1Client();
   var composite = new TestService.CompositeType();

   label1.Content = client.GetData(12345);
   composite.BoolValue = checkBox1.IsChecked == true;
   composite.StringValue = textBox1.Text;
   composite = client.GetDataUsingDataContract(composite);
   label2.Content = composite.StringValue;
}

目次

  1. はじめに
  2. サンプル WCF サービス アプリケーションの作成
  3. Windows クライアントで WCF サービスを利用する
  4. Web アプリケーションで WCF サービスを利用する
  5. Office アプリケーションで WCF サービスを利用する
  6. おわりに

1. はじめに

WCF (Windows Communication Foundation) は、.NET Framework 3.0 以降に組み込まれている包括的な通信用の基盤技術です。WCF サービスは、さまざまな通信手段を一貫性のある形で扱うことができ、さらに多様なクライアント向けのアプリケーションで利用できます。

今回は、自動作成される WCF サービス プロジェクトを中心に、Windows アプリケーション、Web アプリケーション、Office アプリケーションのそれぞれで、同じように WCF サービスを利用できることを説明します。

ページのトップへ


2. サンプル WCF サービス アプリケーションの作成

まず、Visual Studio を起動して、[ファイル] メニューの [新規作成] から [プロジェクト] をクリックし、[新しいプロジェクト] を開きます。次に、[インストールされたテンプレート] で [WCF] カテゴリーにある [WCF サービス アプリケーション] を選びます。[名前] には任意のプロジェクト名を指定できますが、ここでは「ServiceSimple」とします。

図 1. [新しいプロジェクト] ダイアログで、WCF サービス アプリケーションを新規作成

[OK] をクリックすると、ServiceSimple という新しい WCF サービス アプリケーション用のプロジェクトと、ソリューションが作成されます。

図 2. プロジェクト作成直後の Visual Studio 2010

自動的に作成される WCF サービスには、GetData と GetDataUsingDataContract を持つ IService1 インターフェイス (IService1.cs) とその実装 (Service1.svc.cs) が実装されています。これらをもとに新しい機能を実装することもできますが、ここではテスト用として、この機能をそのまま利用します。GetData は整数引数を受け取り、それをもとに加工した文字列を返します。GetDataUsingDataContract は、複合型 (Composite) のデータを受け取り、そのメンバーの値を元に加工した値を同じ型で返します。

このサービス (Service1) の実装コードは、次のようになっています。

   public class Service1 : IService1
   {
       public string GetData(int value)
       {
           return string.Format("You entered: {0}", value);
       }

       public CompositeType GetDataUsingDataContract(CompositeType composite)
       {
           if (composite == null)
           {
               throw new ArgumentNullException("composite");
           }
           if (composite.BoolValue)
           {
               composite.StringValue += "Suffix";
           }
           return composite;
       }
   }

今回は、WCF サービス アプリケーションとして作成しているため、このサービスは自動的に ASP.NET でホストされます。ソリューション エクスプローラーで、プロジェクト名 (ServiceSimple) を右クリックし、[プロパティ] を選びます。プロジェクトのプロパティ (設定) ウィンドウが表示されるので、[Web] タブを選びます。ここで、下図のように [Visual Studio 開発サーバーを使用する] をチェックして (デフォルト)、[ポートを指定する] をチェックします。ここで、この設定を保存してください (特にポート番号を変更した場合は、後続のクライアントで利用する際に、サービスを正しく参照できない場合があります)。

図 3. ServiceSimple をデバッグする際に開発サーバーのポートを固定する

これで、開発サーバーで使うポート番号が固定され、クライアント アプリケーションでは固定のポート番号を使ってサービスを参照できるようになります。

ソリューション エクスプローラーで Service1.svc を右クリックし、[ブラウザーで表示] を選ぶと、次のようにサービスを利用する準備ができていることがわかります。

図 4. Service1.svc サービスをブラウザーで開いたところ

Note: WCF サービスの詳細、および運用のためのサービスのホストについては、合わせて「サービスの作成 (WCF)」、「サービスの起動 (WCF のホスティング)」、「サービスの起動の自動化 (WCF の IIS ホスティング)」、「サービスの利用」などをご覧ください。

ページのトップへ


3. Windows クライアントで WCF サービスを利用する

先ほど作成した ServiceSimple ソリューションに、Windows アプリケーション用のプロジェクトを追加します。ソリューション エクスプローラーで、先頭のソリューション名 (ServiceSimple) を右クリックし、[追加] - [新しいプロジェクト] で、[Windows] カテゴリーの [WPF アプリケーション] を選びます。ここでは、プロジェクト名を「WpfClient」とします。

図 5. [新しいプロジェクト] ダイアログで、WPF アプリケーションを新規作成

[OK] をクリックすると、WpfClient という新しい Windows アプリケーション用のプロジェクトが作成されます。

図 6. WPF アプリケーション プロジェクトを作成直後の Visual Studio 2010

デバッグするときに、このアプリケーションを起動するためにソリューション エクスプローラーで WpfClient を右クリックし、[スタートアップ プロジェクトに設定] を選びます。

また、このアプリケーションで WCF サービスを利用するために、ソリューション エクスプローラーで WpfClient を右クリックし、[サービス参照の追加] を選びます。「サービス参照の追加」ダイアログが表示されるので、右上の [探索] ボタンを押します。これで、このソリューションに含まれるサービス (Service1) が表示されます。

図 7. [サービス参照の追加] ダイアログ

ダイアログの下部にある「名前空間」には、「TestService」と入力して [OK] ボタンを押します。ここで、このプロジェクトの app.config を表示すると、サービスを利用するためのエンドポイントは次のようになっています。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   ……
   <client>
      <endpoint address="http://localhost:50000/Service1.svc" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_IService1" contract="MyServiceReference.IService1"
          name="BasicHttpBinding_IService1" />
   </client>
 </system.serviceModel>
</configuration>

メイン ウィンドウには、ツールボックスから TextBox、CheckBox、Button、そして 2 つの Label を配置します (下図参照)。

図 8. WPF のユーザー インターフェイス

ボタンをダブルクリックして、次のようなイベント ハンドラーを割り当てます。

   private void button1_Click(object sender, RoutedEventArgs e)
   {
       var client = new TestService.Service1Client();
       var composite = new TestService.CompositeType();
       label1.Content = client.GetData(12345);
       composite.BoolValue = checkBox1.IsChecked == true;
       composite.StringValue = textBox1.Text;
       composite = client.GetDataUsingDataContract(composite);
       label2.Content = composite.StringValue;
   }

アプリケーションを実行して、チェックボックスをチェックし、入力ボックスに文字列を入れてボタンを押します。先ほど作成した WCF サービスが呼び出されて、2 つのラベルに結果が表示されることがわかります。

図 9. WCF から返された結果が表示されている

ページのトップへ


4. Web アプリケーションで WCF サービスを利用する

続いて、ServiceSimple ソリューションに、Web アプリケーション用のプロジェクトを追加します。ソリューション エクスプローラーで、先頭のソリューション名 (ServiceSimple) を右クリックし、[追加] - [新しいプロジェクト] で、[Web] カテゴリーの [ASP.NET Web アプリケーション] を選びます。ここでは、プロジェクト名を「WebClient」とします。

図 10. [新しいプロジェクト] ダイアログで、Web アプリケーションを新規作成

[OK] をクリックすると、WebClient という新しい Windows アプリケーション用のプロジェクトが作成されます。

図 11. Web アプリケーション プロジェクトを作成直後の Visual Studio 2010

デバッグするときに、このアプリケーションを起動するためにソリューション エクスプローラーで WebClient を右クリックし、[スタートアップ プロジェクトに設定] を選びます。

このアプリケーションで WCF サービスを利用するために、ソリューション エクスプローラーで WebClient を右クリックし、[サービス参照の追加] を選びます。WpfClient の場合と同様に、このソリューションに含まれるサービス (Service1) を「TestService」という名前で追加します。Web.config を見ると、サービスを利用するためのエンドポイントは、WpfClient のものと同じであることがわかります。

Default.aspx のデザイン ページを表示して、ツールボックスから TextBox、CheckBox、Button、そして 2 つの Label を配置します。CheckBox には適当な文字列を割り当てておくとよいでしょう (下図参照)。

図 12. Web アプリケーションのユーザー インターフェイス

ボタンをダブルクリックして、次のようなイベント ハンドラーを割り当てます。

   protected void Button1_Click(object sender, EventArgs e)
   {
       var client = new TestService.Service1Client();
       var composite = new TestService.CompositeType();

       Label1.Text = client.GetData(12345);
       composite.BoolValue = CheckBox1.Checked;
       composite.StringValue = TextBox1.Text;
       composite = client.GetDataUsingDataContract(composite);
       Label2.Text = composite.StringValue;
   }

アプリケーションを実行して、チェックボックスをチェックし、入力ボックスに文字列を入れてボタンを押します。先ほど作成した WCF サービスが呼び出されて、2 つのラベルに結果が表示されることがわかります。

図 13. WCF から返された結果が表示されている

ページのトップへ


5. Office アプリケーションで WCF サービスを利用する

さらに、ServiceSimple ソリューションに、Office アプリケーション用のプロジェクトを追加します。なお、この機能を利用するためには、Visual Studio 2010 Professional 以上 (Express Editions、Visual Studio 2008 Standard を除く)、および Microsoft Office 2007 または 2010 Professional 以上 (本項で使うのは Excel 2010) が必要です。

ソリューション エクスプローラーで、先頭のソリューション名 (ServiceSimple) を右クリックし、[追加] - [新しいプロジェクト] で、[Office] カテゴリーの [Excel 2010 ブック] を選びます。ここでは、プロジェクト名を「ExcelBookClient」とします。

図 14. [新しいプロジェクト] ダイアログで、Excel 2010 ブック アプリケーションを新規作成

[OK] をクリックすると、「Visual Studio Tools for Office プロジェクト ウィザード」が表示されて、新しいドキュメントを作成するか、既存のドキュメントを利用するかを尋ねるダイアログが表示されます。ここでは、新しいドキュメントを作成します。名前を ExcelBookClient のままにして、[OK] ボタンを押します。

図 15. 新しい Excel ドキュメントを作成する

[OK] をクリックすると、ExcelBookClient という新しい Excel ドキュメント (ブック) ベースのプロジェクトが作成されます。

図 16. 新しい Excel ドキュメント プロジェクトを作成直後の Visual Studio 2010

デバッグするときに、このアプリケーションを起動するためにソリューション エクスプローラーで ExcelBookClient を右クリックし、[スタートアップ プロジェクトに設定] を選びます。

このアプリケーションで WCF サービスを利用するために、ソリューション エクスプローラーで ExcelBookClient を右クリックし、[サービス参照の追加] を選びます。WpfClient の場合と同様に、このソリューションに含まれるサービス (Service1) を「TestService」という名前で追加します。app.config を見ると、サービスを利用するためのエンドポイントは、WpfClient のものと同じであることがわかります。

ExcelBookClient.xlsx の Sheet1.cs を表示して、下図を参考にシートのセルを入力し、ツールボックスから Button を 1 つ配置します。

図 17. Excel ドキュメントの設定 (B2 セルには「TRUE」か「FALSE」を入力する)

ボタンをダブルクリックして、次のようなイベント ハンドラーを割り当てます。

   private void button1_Click(object sender, EventArgs e)
   {
       var result = Cells[2, 2].Value2;
       if (result is bool?)
       {
           var client = new MyServiceReference.Service1Client();
           var composite = new MyServiceReference.CompositeType();

           composite.BoolValue = (result as bool?) == true;
           composite.StringValue = Cells[1, 2].Value2 as string;
           Cells[5, 2].Value2 = client.GetData(12345);
           composite = client.GetDataUsingDataContract(composite);
           Cells[6, 2].Value2 = composite.StringValue;
       }
       else
       {
           MessageBox.Show("A2 セルに True/False 以外の値が入っています。");
       }
   }

アプリケーションを実行すると、この Excel ドキュメントを表示するために Excel が起動します。ボタンを押すと、WCF サービスが呼び出されて、セルに結果が表示されることがわかります。

図 18. Excel ドキュメントからも WCF サービスを利用できる

ページのトップへ


6. おわりに

このように、WCF サービスは、利用するクライアントの形態を問わず、同じようなスタイルで利用できます。今回は、ASP.NET で WCF サービスをホストしましたが、他の方法でホストする場合や、より複雑な WCF サービスを作成する場合でも、基本的な利用方法に違いはありません。ぜひ活用してください。


 

Code Recipe .NET Framework デベロッパー センター

ページのトップへ