次のように、WCF ライブラリに 3 つのサービス コントラクト インターフェイスがあります。
public interface ServiceContract1{}
public interface ServiceContract2{}
public interface ServiceContract3 : ServiceContract1, ServiceContract2 {}
また、ServiceContract3 を実装するサービスもあります。次のように、それぞれに異なるコントラクトを設定することで、異なるエンドポイントを持つことができます。
<endpoint address="net.tcp://localhost:5556/ServiceContract1"
binding="netTcpBinding" name="netTcpBinding1"
contract="WcfServiceLibrary.IServiceContract1">
<endpoint address="net.tcp://localhost:5556/ServiceContract2"
binding="netTcpBinding" name="netTcpBinding2"
contract="WcfServiceLibrary.IServiceContract2">
これらのエンドポイントは非常にうまく機能しているように見えますが、mexHttpBinding
自動的に生成されるエンドポイントは 1 つだけです。したがって、クライアントはエンドポイントの 1 つを使用する必要がありますが、サービス参照を追加した後はクラス全体が含まれます。
mexHttpBinding
コントラクトごとに異なるエンドポイントを持つことはできますか? 私が従うことができるアプローチはありますか?ご協力いただきありがとうございます。
編集 #1: ServiceModel 構成
<system.serviceModel>
<services>
<service name="WcfServiceLibrary.Service">
<endpoint address="net.tcp://localhost:5556/Service1"
binding="netTcpBinding" name="netTcpBinding"
contract="WcfServiceLibrary.IServiceContract1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="net.tcp://localhost:5556/Service2"
binding="netTcpBinding" name="netTcpBinding"
contract="WcfServiceLibrary.IServiceContract2">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding"
name="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:5555/ConsoleHost" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
コンソール アプリケーションでホストされているサービスは 1 つだけです。
ServiceHost host = new ServiceHost(typeof(WcfServiceLibrary.Service));
host.Faulted += new EventHandler(Host_Faulted);
// Start listening for messages
host.Open();