Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

WCFをはじめました(サービス編)

WCFをはじめました。

今回はWCFサービスを作成します。クライアントは次回作成します。
WCFでは構成ファイルを使用することもできますが、今回はすべてコードで実装します。

準備

  1. コンソールアプリケーションのプロジェクトを作成する。
  2. System.ServiceModelへの参照を追加する。

コントラクトのソースコード

株価を返すだけのクラスです。

using System.ServiceModel;

namespace HelloWorld {
    [ServiceContract]
    public interface IStockService {
        [OperationContract]
        double GetPrice(string ticker);
    }

    public class StockService : IStockService {
        public double GetPrice(string ticker) {
            return 94.85;
        }
    }
}

Mainのソースコード

using System;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace HelloWorld {
    public class Service{
        static void Main() {
            ServiceHost serviceHost =
                new ServiceHost(typeof(StockService),
                new Uri("http://localhost:8000/HelloWorld"));   // アドレス

            serviceHost.AddServiceEndpoint(
                typeof(IStockService),
                new BasicHttpBinding(),                         // バインディング
                "");

            // HTTP GETを有効にする
            ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
            behavior.HttpGetEnabled = true;
            serviceHost.Description.Behaviors.Add(behavior);

            // MEX(MetadataExchange)エンドポイントを公開する
            serviceHost.AddServiceEndpoint(
                typeof(IMetadataExchange),
                MetadataExchangeBindings.CreateMexHttpBinding(),
                "mex");

            serviceHost.Open();
            Console.ReadLine();
            serviceHost.Close();
        }
    }
}

アプリ実行


クライアントからのアクセスを待機しています。