Практическое руководство. Настройка службы Windows Communication Foundation на совместное использование портов
Самый простой способ использовать общий доступ к портам net.tcp:// в приложении Windows Communication Foundation (WCF) — предоставить службу с помощью NetTcpBinding.
Эта привязка предоставляет свойство PortSharingEnabled, которое определяет, включено ли совместное использование порта net.tcp:// для службы, настраиваемой с этой привязкой.
Следующая процедура показывает, как использовать класс NetTcpBinding, чтобы открыть конечную точку по универсальному коду ресурса (URI) net.tcp://localhost/MyService, сначала в коде, а затем с помощью элементов конфигурации.
Включение совместного использования порта net.tcp:// в привязке NetTcpBinding с помощью кода
Создайте службу для реализации вызываемого
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
Создайте экземпляр класса NetTcpBinding и задайте для свойства PortSharingEnabled значение
true
.NetTcpBinding portsharingBinding = new NetTcpBinding(); portsharingBinding.PortSharingEnabled = true;
Dim portsharingBinding As New NetTcpBinding() portsharingBinding.PortSharingEnabled = True
Создайте 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 с помощью конфигурации
- В следующем примере показано, как включить совместное использование порта и добавить конечную точку службы с помощью элементов конфигурации.
<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>