Architect's Log

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

WCFサービスの作成

WCFサービスを作成、起動します。

手順

[新しいプロジェクト]でコンソールアプリケーションを作成する。
System.ServiceModelへの参照を追加する。
ソースコードを記述する。
using System;
using System.ServiceModel;

namespace HellowWCF1 {

    /// <summary>
    /// サービスのコントラクトを定義する
    /// </summary>
    [ServiceContract(Namespace = "http://My.WCF.Samples")]
    public interface IServeice1 {
        [OperationContract]
        string getMessage(string inputMessage);
    }

    /// <summary>
    /// サービス実装クラス
    /// </summary>
    public class Service1 : IServeice1 {
        public string getMessage(string inputMessage) {
            Console.WriteLine("getMessageが呼び出されました。");
            return "ようこそ、" + inputMessage;
        }
    }

    class Program {
        static void Main(string[] args) {
            Uri baseAddr = new Uri("http://localhost:8000/WCFSampleService");

            // サービスの型およびベースアドレスを指定して、サービスホストを作成します。
            using (ServiceHost svcHost = new ServiceHost(typeof(Service1), baseAddr)) {
                Console.WriteLine("サービスが立ち上がります...");

                // コントラクト、バインディング、相対アドレスを指定して、エンドポイントを追加します。
                svcHost.AddServiceEndpoint(typeof(IServeice1), new BasicHttpBinding(), "HelloWCF");

                // サービスホストをオープンします。
                svcHost.Open();

                Console.WriteLine("Enterキーを押すと、サービスが停止されます。");
                Console.ReadLine();

                // サービスホストを閉じます。
                svcHost.Close();
            }
        }
    }
}
F5キーを押す。
サービスが実行される。

まとめ

P.53, 54から引用します。

  1. System.ServiceModelへの参照は必須です。
  2. WCFサービスのコントラクトは、ServiceContract属性のインターフェースで定義されます。
  3. そのメソッドは、OperationContract属性が付与されるべきです。
  4. ホストされるWCFサービスのタイプは、サービス実装クラスで定義されます。
  5. ベースアドレスにより、定義されたWCFサービスホストへの参照ができます。
  6. 1つのWCFサービスホストには、1つ以上のエンドポイントを持つことができます。
  7. 1つのエンドポイントは、1つの特定のWCFサービス(インターフェース)を提供します。
  8. 特定のエンドポイントへの参照は、ベースアドレスに対する相対アドレスを利用することができます。
  9. 従来の1つのインターフェースは複数のメソッドの集合と同じように、1つのWCFサービスコントラクトには、複数のオペレーションコントラクトとデータコントラクトを含むことができます。
  10. ホストされるWCFサービスのタイプとベースアドレスをパラメータとして、WCFサービスホストのServiceHostクラスのインスタンスを生成することができます。
  11. 特定のWCFサービスのコントラクトとバインディングおよび相対アドレスの3要素を含むエンドポイントをホストに追加して、明示的な構成パラメータでホストをインスタンス化することができます。