WCF最初の一歩
と題しまして、じぇんじぇんわからないのでまずはチュートリアル的なものをやってみます。
お題はMSDNのWindows Communication Foundation チュートリアル入門を使います。
基本的なWCFサービスと呼び出しを作る6つのタスク
と言われてもどうすればいいのかサッパリわかりませんよと。
では順番にやっていきます。
とりあえずプロジェクトを作る
チュートリアルではコンソールアプリとして作っています。
参照設定にSystem.ServiceModelを追加する以外は普通のコンソールアプリです。
サービス コントラクトを定義する
まずは作成するサービスの内容をインターフェースで定義するみたいです。
Service.csファイルを新規作成し、以下のように記述します。
using System; using System.ServiceModel; namespace SuperlightBrothers.Samples { [ServiceContract(Namespace = "http://SuperlightBrothers.Samples")] public interface ICalculator { [OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2); } }
サービス コントラクトを実装する
次に定義したサービスインターフェースの実装を作ります。今回はチュートリアルに従って同じファイルに記述します。
using System; using System.ServiceModel; namespace SuperlightBrothers.Samples { [ServiceContract(Namespace = "http://SuperlightBrothers.Samples")] public interface ICalculator { [OperationContract] double Add(double n1, double n2); [OperationContract] double Subtract(double n1, double n2); [OperationContract] double Multiply(double n1, double n2); [OperationContract] double Divide(double n1, double n2); } public class CalculatorService : ICalculator { public double Add(double n1, double n2) { return n1 + n2; } public double Subtract(double n1, double n2) { return n1 - n2; } public double Multiply(double n1, double n2) { return n1 * n2; } public double Divide(double n1, double n2) { return n1 / n2; } } }
基本的なサービスをホストおよび実行する
次にWCFサービスをホストしてみるみたいです。チュートリアルではとりあえずHTTPでセルフホストするようです。
他にもサービスの提供方法はTCPやMSMQとかいろいろあるみたい。ホストもセルフ以外にIISとかでもできるみたい。
コンソールアプリプロジェクト生成時に追加されたProgram.csファイルを以下のように編集します。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; namespace SuperlightBrothers.Samples { class Program { static void Main(string[] args) { var selfHost = new ServiceHost(typeof(CalculatorService), new Uri("http://localhost:8000/ServiceModelSample/Service")); try { selfHost.AddServiceEndpoint( typeof(ICalculator), new WSHttpBinding(), "http://localhost:8000/ServiceModelSamples/Service/CalculatorService" ); ServiceMetadataBehavior serviceMetadataBehavior = new ServiceMetadataBehavior() { HttpGetEnabled = true }; selfHost.Description.Behaviors.Add(serviceMetadataBehavior); selfHost.Open(); Console.WriteLine("Enterキーで終了"); Console.ReadLine(); selfHost.Close(); } catch (CommunicationException ex) { Console.WriteLine(ex.Message); selfHost.Abort(); } } } }
言われるままに記述。BehaviorのServiceへの追加方法がチュートリアルに記述されていないので注意。たぶんこれでいいはず。
ホストの手順(チュートリアルのまま)
実行する
この段階で実行し、ブラウザでhttp://localhost:8000/ServiceModelSample/Serviceを見ると、『CalculatorService サービス』のサービスを作成した内容とクライアントの作成方法が書かれたページが表示される。
公開方法にWsHttpBindingを指定したためだと思うが、WSDLまで自動生成できるようになってた。すげぇな。
とりあえず今日はここまで、続きは次回。