更新日: 2010 年 6 月 2 日

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

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

  • WCF サービスの作成方法を理解する

今回紹介するコード

<IOrderService.cs>

C#
// サービスコントラクト
[ServiceContract]
public interface IOrderService
{
    [OperationContract]
    OrderItem GetOrderById(int id);
}

// データコントラクト
[DataContract]
public class OrderItem
{
    [DataMember]
    public int Id;
    [DataMember]
    public string Name;
}
 

<OrderService.cs>

C#
// サービスの実装
public class OrderService : IOrderService
{
    public OrderItem GetOrderById(int id)
    {
        return new OrderItem
        {
            Id = id,
            Name = "テスト"
        };
    }
}
 

目次

  1. はじめに
  2. 作成するアプリケーションの概要
  3. コントラクトを作成する
  4. サービスを実装する
  5. デバッグのための準備をする
  6. デバッグ実行する

1. はじめに

ここでは、単純な WCF サービスの構築方法について理解します。

WCF サービスの構築では、サービスの構築以外に、構築したサービスを起動するためのホスティングと、サービスを使用するクライアント (コンシューマー) を構築する必要がありますが、ここでは Visual Studio が提供するホスティングとデバッグ クライアントを使用して動作を確認します。

ページのトップへ


2. 作成するアプリケーションの概要

ここでは、注文 ID を渡すことで、注文情報 (Order) の詳細を取得する簡単な WCF サービスを作成します。

ページのトップへ


3. コントラクトを作成する

以下の手順で、Visual Studio を起動して、新規にプロジェクトを作成します。

[ファイル] メニューの [新規作成] を選択して、[プロジェクト] をクリックします。表示される [新しいプロジェクト] ダイアログ ボックスの、プロジェクトの種類ペインで [Visual C#] ノードを展開し、[WCF] をクリックします。図 1 の通り、[テンプレート] ペインでは [WCF サービス ライブラリ] をクリックします。([プロジェクト名] ボックス、[場所] ボックスには任意の名称とパスを指定してください。)

図 1. プロジェクト テンプレートを選択してプロジェクトを作成

プロジェクトを作成すると、ソリューション エクスプローラーに IService.cs という名称のコントラクトのコードが表示されますので、これを 図 2 の通り、IOrderService.cs に変更します。

図 2. サービス コントラクトの名称を変更

「IService1 への参照をすべて変更しますか」と記載されたダイアログ ボックスが表示されますので、[はい] をクリックすることで、コード内に記載された既定の IService1 の名称が IOrderService に変更されます。

コントラクトのコードを作成します。

まず、IOrderService.cs のコードを表示し、以下の通り、今回扱う OrderItem のクラスを DataContract 属性、DataMember 属性を指定して作成します。(なお、Visual Studio 2008 サービス パック 1 以降では、DataContract 属性、DataMember 属性を省略することができます。この場合、既定のデータ コントラクトが使用されます。)

C#
{
    . . . .

    [DataContract]
    public class OrderItem
    {
        [DataMember]
        public int Id;
        [DataMember]
        public string Name;
    }
}
 

つぎに、サービスが提供するオペレーション (メソッド) として、以下の GetOrderById メソッドを OperationContarct 属性を使用して以下の通り定義します。

C#
namespace WcfServiceLibrary1
{
    [ServiceContract]
    public interface IOrderService
    {
        [OperationContract]
        OrderItem GetOrderById(int id);
    }

    [DataContract]
    public class OrderItem
    {
      . . . . .
 

以上で、コントラクトの作成は終了です。

ページのトップへ


4. サービスを実装する

つぎに、サービスの処理を実装します。

ソリューション エクスプローラーで、既定で作成されている Service1.cs の名称を 図 3 の通り OrderService.cs に変更します。

図 3. サービスの名称を変更

さきほどと同様、「Service1 への参照をすべて変更しますか」と記載されたダイアログ ボックスが表示されますので、[はい] をクリックします。

OrderService.cs のコードを開き、以下の通り、GetOrderById メソッドを実装します。今回は、受け取った引数 (id) を使用して、サンプルの OrderItem オブジェクトを作成して返しています。

C#
namespace WcfServiceLibrary1
{
    public class OrderService : IOrderService
    {
        public OrderItem GetOrderById(int id)
        {
            return new OrderItem
            {
                Id = id,
                Name = "テスト"
            };
        }
    }
}
 

ページのトップへ


5. デバッグのための準備をする

以上でサービス コントラクト、およびサービスの実装はすべて完了しました。以降は、この WCF サービスを起動するためのホスティングを構築して、この WCF サービスと接続するクライアント (コンシューマー) を構築していきます。

しかし、現実の開発では、このように WCF サービスが構築された時点で、そのサービスにバグ (不具合) などがないかデバッグをおこなう必要があるでしょう。こうしたデバッグ作業のために、毎回、ホスティングやクライアント (コンシューマー) の構築 (実装) も必要となってしまいます。

そこで、Visual Studio では、こうした付随するホスティングやクライアント (コンシューマー) を作成しなくても、この構築された WCF サービス自体を構成することで、ホスティングや、テスト クライアント (テスト用のコンシューマー) を使用したデバッグが可能になっています。以降では、このための構成をおこなってデバッグをおこないます。

まず、プロジェクトの App.config (下記) を開いて、デバッグ用に、ホスティングのための設定をおこないます。

1:<?xml version="1.0" encoding="utf-8" ?>
2:<configuration>
3:  <system.web>
4:    <compilation debug="true" />
5:  </system.web>
6:  <system.serviceModel>
7:    <services>
8:      <service behaviorConfiguration="WcfServiceLibrary1.Service1Behavior"
           name="WcfServiceLibrary1.OrderService">
9:        <endpoint address="" binding="wsHttpBinding"
             contract="WcfServiceLibrary1.IOrderService">
10:          <identity>
11:            <dns value="localhost" />
12:          </identity>
13:        </endpoint>
14:        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
15:        <host>
16:          <baseAddresses>
17:            <add baseAddress="http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service1/" />
18:          </baseAddresses>
19:        </host>
20:      </service>
21:    </services>
22:    <behaviors>
23:      <serviceBehaviors>
24:        <behavior name="WcfServiceLibrary1.Service1Behavior">
25:          <serviceMetadata httpGetEnabled="True"/>
26:          <serviceDebug includeExceptionDetailInFaults="False" />
27:        </behavior>
28:      </serviceBehaviors>
29:    </behaviors>
30:  </system.serviceModel>
31:</configuration>

Visual Studio 2008 サービス パック 1 以降を使用している場合には、(上記の App.config に対して) 何も変更する必要はありません。サービス パック 1 以前の Visual Studio 2008 (製造工程に向けたリリース版) を使用している場合には、8 行目、9 行目で、上記の通り OrderService、IOrderService を指定してください。

上記の 6 行目 ~ 30 行目が、WCF サービスの構成情報です。

また、15 行目 ~ 19 行目によって、このサービスをデバッグする際に、指定されたアドレス (この場合は、http://localhost:8731/Design_Time_Addresses/WcfServiceLibrary1/Service1/) でサービスのホスティングがおこなわれます。

9 行目の binding="wsHttpBinding" は重要です。この設定によって、このサービスは、デバッグ時に、WS-* プロトコルによる Web サービス標準に従った通信をおこないます。例えば、Basic Profile に準じた一般的な Web サービスの通信をおこなう場合には、この箇所を binding="basicHttpBinding" に変更します。(今回は変更をおこなわず、wsHttpBinding のままデバッグをおこないます。)

Note: この設定で動作しますが、実際の開発では、構成情報 (.config) におけるサービスの URL、その他のアシュアランス情報 (セキュリティ、スロットリング等) を確認内容に応じて適宜変更しておきます。

ページのトップへ


6. デバッグ実行する

では、デバッグ実行をしてみましょう。

Visual Studio で [F5] キーを押すか、[デバッグ] メニューから [デバッグ開始] をクリックします。

デバッグが開始されると、図 4 の通り、デバッグ用のテスト クライアント (テスト用のコンシューマー) が作成されて起動します。

図 4. デバッグ用のテスト クライアント

上図で、id に適当な値を入力して [起動] ボタンを押すと、作成したサービスが呼び出され、右下の [応答] 欄に返り値である OrderItem の結果が表示されます (図 5)。

図 5. テスト クライアントによる結果の表示


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

ページのトップへ