Практическое руководство. Настройка службы Windows Communication Foundation на совместное использование портов

Самый простой способ использовать общий доступ к портам net.tcp:// в приложении Windows Communication Foundation (WCF) — предоставить службу с помощью NetTcpBinding.

Эта привязка предоставляет свойство PortSharingEnabled, которое определяет, включено ли совместное использование порта net.tcp:// для службы, настраиваемой с этой привязкой.

Следующая процедура показывает, как использовать класс NetTcpBinding, чтобы открыть конечную точку по универсальному коду ресурса (URI) net.tcp://localhost/MyService, сначала в коде, а затем с помощью элементов конфигурации.

Включение совместного использования порта net.tcp:// в привязке NetTcpBinding с помощью кода

  1. Создайте службу для реализации вызываемого IMyService контракта и вызова его MyService.

    [ServiceContract]
    interface IMyService
    {
    
       //Define the contract operations.
    }
    
    class MyService : IMyService
    {
    
    //Implement the IMyService operations.
    }
    
    <ServiceContract()> _
    Friend Interface IMyService
    
        'Define the contract operations.
    
    End Interface
    
    Friend Class MyService
        Implements IMyService
    
        'Implement the IMyService operations.
    
    End Class
    
  2. Создайте экземпляр класса NetTcpBinding и задайте для свойства PortSharingEnabled значение true.

    NetTcpBinding portsharingBinding = new NetTcpBinding();
    portsharingBinding.PortSharingEnabled = true;
    
    Dim portsharingBinding As New NetTcpBinding()
    portsharingBinding.PortSharingEnabled = True
    
  3. Создайте ServiceHost и добавьте в него конечную точку службы для MyService, использующей привязку NetTcpBinding, поддерживающую совместное использование порта, и ожидающей передачи данных по универсальному коду ресурса (URI) адреса конечной точки "net.tcp://localhost/MyService".

    ServiceHost host = new ServiceHost( typeof( MyService ) );
    host.AddServiceEndpoint( typeof( IMyService ), portsharingBinding,"net.tcp://localhost/MyService" );
    
    
    Dim host As New ServiceHost(GetType(MyService))
    host.AddServiceEndpoint(GetType(IMyService), portsharingBinding, "net.tcp://localhost/MyService")
    

    Примечание.

    В этом примере используется TCP-порт 808 по умолчанию, так как в универсальном коде ресурса (URI) адреса конечной точки не указан другой номер порта. Так как в транспортной привязке явно включено совместное использование порта, эта служба может использовать порт 808 совместно с другими службами в других процессах. Если бы совместное использование порта не было бы разрешено и порт 808 уже использовался бы другим приложением, то при открытии данной службы она бы создала исключение AddressAlreadyInUseException.

Включение совместного использования порта net.tcp:// в привязке NetTcpBinding с помощью конфигурации

  1. В следующем примере показано, как включить совместное использование порта и добавить конечную точку службы с помощью элементов конфигурации.
<system.serviceModel>  
  <bindings>  
    <netTcpBinding name="portSharingBinding"
                   portSharingEnabled="true" />  
  </bindings>  
  <services>  
    <service name="MyService">  
        <endpoint address="net.tcp://localhost/MyService"  
                  binding="netTcpBinding"  
                  contract="IMyService"  
                  bindingConfiguration="portSharingBinding" />  
    </service>  
  </services>  
</system.serviceModel>  

См. также