WCF再訪 – 構成ファイルによるサービス公開

ブログを書き始めた半年前、WCFによるプロセス間通信を紹介しました。その時は全てをC#のコードで紹介しましたがWCF再訪と題してサービスを構成ファイルを使った場合をご紹介します。今回、クライアント側は変更しませんので以前の投稿を参照ください。

0.コントラクト

ITestContract.cs

namespace TestContract
{
    using System;
    using System.ServiceModel;
    [ServiceContract]
    public interface ITestContract
    {
        [OperationContract]
        DateTime GetTime();
    }
}

ご覧の通り、時刻取得ができるサービスです。

 

1.サービスをC#コードで記述する

対比のために前回の内容を再度ご紹介。

TestServer.cs

namespace TestServer
{
    using System;
    using System.ServiceModel;
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public class TestServer : TestContract.ITestContract
    {
        public DateTime GetTime()
        {
            return DateTime.Now;
        }
    }
}

これをC#コードでバインディングやアドレスを指定してホストするには以下のようにします。

 Program.cs

namespace TestServer
{
    using System;
    using System.ServiceModel;

    class Program
    {
        static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(new TestServer(),
                new Uri("net.pipe://localhost"));
            host.AddServiceEndpoint(
                typeof(TestContract.ITestContract),
                new NetNamedPipeBinding(),
                "InterProcessCommunication");
            host.Open();
            Console.WriteLine("Enter押下で終了.");
            Console.ReadLine();
        }
    }
}

 

2.サービスを構成ファイルに記述する

コントラクトを実現する部分は同じです。

TestServer.cs

namespace TestServerByConfigFile
{
    using System;
    using System.ServiceModel;
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public class TestServer : TestContract.ITestContract
    {
        public DateTime GetTime()
        {
            return DateTime.Now;
        }
    }
}

構成ファイルapp.configは以下のようにします。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.serviceModel>
    <services>
      <service name="TestServerByConfigFile.TestServer">
        <host>
          <baseAddresses>
            <add baseAddress="net.pipe://localhost"/>
          </baseAddresses>
        </host>
        <endpoint address="InterProcessCommunication"
                  binding="netNamedPipeBinding"
                  contract="TestContract.ITestContract"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

ABCを構成ファイルに移動した分、これをホストするコードはシンプルになります。

Program.cs 

namespace TestServerByConfigFile
{
    using System;
    using System.ServiceModel;

    class Program
    {
        static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(TestServer));
            host.Open();
            Console.WriteLine("Enter押下で終了.");
            Console.ReadLine();
        }
    }
}

どちらでも書けるようになっておきたいですね。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中