複数の WCF サービスでポートを共有する方法

1つのマシンで自作の WCF サービスを複数動かすとき、その1つ1つに異なるポートを割り当てるのって面倒。1つにまとめたいですよね。

そんな人に朗報です。NetTcpBinding なら、「Net.TCP ポート共有サービス」が使えます。使い方は簡単で、NetTcpBinding の PortSharingEnabled プロパティを true にするだけです。

コードで指定したのがこちら。

var host = new ServiceHost(typeof(FooService));
host.AddServiceEndpoint(typeof(IFooService),
    new NetTcpBinding()
    {
        PortSharingEnabled = true, // ポートを共有する!
    },
    "net.tcp://localhost:8081/Foo");
host.Open();

構成ファイルでも指定できます。

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <!-- ポートを共有する -->
      <binding name="NetTcpPortShareBinding"
               PortSharingEnabled="true"/>
    </netTcpBinding>
  </bindings>
</syatem.serviceModel>

これらはサービス側で指定してやれば OK。

あと、この機能を使うには『Net.Tcp Port Sharing Service』っていう Windows サービスが動いていないとダメです。[コントロールパネル]-[管理ツール]-[サービス] を起動し、状態が「開始」になっているか要確認。
f:id:griefworker:20100625122224j:image

デフォルトでは無効という話だったけど、既に動いていました。いつのまに動かしたんだろう…。あ、オチは無いです。