WCFでRESTfulサービスを作成する方法

WCF(Windows Communication Foundation)は、.NetでWebサービスを構築するために使用できる、安全で信頼性が高く、スケーラブルなメッセージングプラットフォームです。これは、サービス指向アプリケーションを開発するための統合プログラミングモデルを提供します。

WCFを使用して、.NETでRESTfulサービスを構築できます。REST(Representational State Transfer)は、RESTアーキテクチャの原則に準拠するアーキテクチャパラダイムです。RESTアーキテクチャは、リソースの概念に基づいています。リソースを使用して、アプリケーションの状態と機能を表します。これらのリソースは、HTTPプロトコルを介したURIを使用して識別されます。

WCFサービスの作成

このセクションでは、WCFでRESTfulサービスを構築する方法について説明します。まず、VisualStudioで新しいWCFサービスを作成しましょう。これを行うには、以下に概説する手順に従います。この記事に示されているアプリケーションをビルドするために、私はVisual Studio 2015を使用しましたが、Visual Studio2012または2013を使用することもできます。

  1. Visual Studio2015を開きます
  2. Visual Studio IDEの[ファイル]メニューで、[スタート]-> [ファイル]-> [新規]-> [プロジェクト]をクリックします。
  3. 次に、表示されたプロジェクトテンプレートのリストからWCFを選択します
  4. 右側のペインで[WCFサービスアプリケーション]を選択します
  5. WCFサービスプロジェクトの名前を指定し、[OK]をクリックして保存します

これにより、指定した名前で新しいWCFサービスアプリケーションプロジェクトが作成されます。プロジェクトには、説明のみを目的としたデフォルトのサービスも含まれます。

RESTfulWCFサービスの実装

WCFを使用する場合は、最初にサービスコントラクトを作成してから、サービスオペレーションまたはオペレーションコントラクトを定義する必要があります。通常、WCFサービスは次のもので構成されます。

  1. サービスクラス
  2. サービス契約
  3. 1つ以上の運用契約
  4. 1つ以上のエンドポイント
  5. ホスティング環境

ServiceContractは、サービスクライアントが使用できる操作を指定するために使用されます。次のコードスニペットは、サービスコントラクトがどのように見えるかを示しています。後でこれを変更してRESTfulにします。

 [ServiceContract]

    public interface ICustomerService

    {

        [OperationContract]

        List GetCustomerList();

    }

DataContractは、サービスプロバイダーとサービスコンシューマーの間で交換する必要のあるデータを記述するために使用されます。Customerという次のDataContractについて考えてみます。

[DataContract(Namespace = "")]

public class Customer

    {

        [DataMember]

        public Int32 CustomerID { get; set; }

        [DataMember]

        public string FirstName { get; set; }

        [DataMember]

        public string LastName { get; set; }

        [DataMember]

        public String Address { get; set; }

    }

運用コントラクトは、メソッドをサービスメソッドとして公開するために使用され、トランザクションフロー、サービスオペレーションの方向、および関連付けられる可能性のある障害コントラクトも公開します。次のコードスニペットは、OperationContract属性を使用してサービス操作を宣言し、WebInvoke属性を使用してHTTP操作、URI、Webメッセージ形式などを指定する方法を示しています。

[OperationContract]

        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,

        BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetCustomers")]

List GetCustomerList();

次のコードスニペットは、サービスメソッドにWebInvoke属性を適用することにより、カスタマーサービスをRESTfulにする方法を示しています。

public interface ICustomerService

    {

        [OperationContract]

        [WebInvoke(Method = "GET",

            ResponseFormat = WebMessageFormat.Json,

            BodyStyle = WebMessageBodyStyle.Wrapped,

            UriTemplate = "GetCustomers")]

        List GetCustomerList();

    }

CustomerServiceクラスは、ICustomerServiceサービスコントラクトを拡張し、GetCustomerListという名前のサービス操作の実装を提供します。CustomerServiceクラスは次のようになります。

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

    public class CustomerService : ICustomerService

    {     

        public List GetCustomerList()

        {

            return PopulateCustomerData();

        }

        private List PopulateCustomerData()

        {

            List lstCustomer = new List();

            Customer customer1 = new Customer();

            customer1.CustomerID = 1;

            customer1.FirstName = "John";

            customer1.LastName = "Meaney";

            customer1.Address = "Chicago";

            lstCustomer.Add(customer1);

            Customer customer2 = new Customer();

            customer2.CustomerID = 1;

            customer2.FirstName = "Peter";

            customer2.LastName = "Shaw";

            customer2.Address = "New York";

            lstCustomer.Add(customer2);

            return lstCustomer;

        }

    }

PopulateCustomerDataメソッドはサービスメソッドではないことに注意してください。これは、顧客レコードのリストを返すプライベートメソッドであり、GetCustomerListサービスメソッドから呼び出されます。

次に行うべきことは、WCFサービスを構成することです。これを行うには、バインディングとエンドポイントの詳細、およびサービスの動作を指定する必要があります。次のコードスニペットは、このサービスのサービス構成がどのように見えるかを示しています。

   

     

       

       

     

   

   

     

       

         

         

       

     

     

       

         

       

     

   

   

 

そして、それはあなたがしなければならないすべてです。これで、Webブラウザーを開いて、WCFRESTfulサービスをテストできます。