サービスは複数のエンドポイントを持つことができますか?
-
09-06-2019 - |
質問
net.tcp 上でのみサポートされる設定がいくつかあるサービスがあります。別のエンドポイントを追加する最良の方法は何ですか?新しいホスト全体を作成する必要がありますか?
解決
サービスは 1 つのホスト内に複数のエンドポイントを持つことができますが、すべてのエンドポイントにはアドレス、バインディング、コントラクトの一意の組み合わせが必要です。IIS でホストされるサービス (つまり、.SVC ファイル) の場合は、エンドポイントのアドレスを 相対的 URI を指定し、Visual Studio または wsdl.exe で生成されたクライアントがコンストラクターでエンドポイントの名前を指定していることを確認してください。
MSDN の記事も参照してください 複数のエンドポイント.
他のヒント
サーバー上またはクライアント上で複数のエンドポイントを定義できます。
クライアントでこれを行うには、別の名前の新しいエンドポイントを使用して app.config ファイルを編集し、新しいクライアントの作成時に定義するだけです。
たとえば、クライアント アプリに次のようなエンドポイントがあるとします。
<endpoint address="https://yourdomain.com/WCF/YourService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IYourService"
contract="MessagingService.IYourService"
name="BasicHttpBinding_IYourService" />
次のように呼び出します。
YourServiceClient client = new YourServiceClient();
新しい名前で新しいエンドポイントを追加できます。
<endpoint address="https://yourotherdomain.com/WCF/YourService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IYourService"
contract="MessagingService.IYourService"
name="BasicHttpBinding_IYourService_ENDPOINT2" />
次のように呼び出すことができます。
YourServiceClient client = new YourServiceClient("BasicHttpBinding_IYourService_ENDPOINT2");
上記のドメインを変更しただけですが、新しいバインド構成セクションを作成した場合は、「bindingConfiguration」の値を変更するだけで済みます。
現在ホストとして IIS を使用している場合は、新しいホスト全体を作成する必要があります。IIS は HTTP のみをサポートし、TCP バインディングはサポートしません。ただし、WAS または Windows サービスを使用している場合は、新しい net.tcp エンドポイントを作成するだけで済みます。
同じサービスに複数のエンドポイントを使用できます。次の方法でも Web 構成を構成できます
<service name="MessagePatternDemo.Service1">
<endpoint name="ep1" address="/ep1" binding="basicHttpBinding"
contract="MessagePatternDemo.IService1"/>
<endpoint name="ep2" address="/ep2" binding="wsHttpBinding"
contract="MessagePatternDemo.IService1" />
<endpoint name="mex" contract="IMetadataExchange" address="mex"
binding="mexHttpBinding" />
</service>