Может ли служба иметь несколько конечных точек?

У нас есть сервис, который имеет некоторые настройки, которые поддерживаются только через net.tcp. Какой лучший способ добавить другую конечную точку? Нужно ли создавать новый хост?

4 ответа

Решение

Служба может иметь несколько конечных точек на одном хосте, но каждая конечная точка должна иметь уникальную комбинацию адреса, привязки и контракта. Для службы, размещенной на 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.

Мы можем использовать несколько конечных точек для одного и того же сервиса. Мы также можем настроить веб-конфигурацию следующим образом

 <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>   
Другие вопросы по тегам