Cómo: Configurar un servicio de Windows Communication Foundation para utilizar puertos compartidos
La manera más fácil de utilizar la compartición de puertos de net.tcp:// en su aplicación de Windows Communication Foundation (WCF) es exponer un servicio mediante NetTcpBinding.
Este enlace proporciona una propiedad PortSharingEnabled que controla si la compartición de puertos de net.tcp:// está habilitada para el servicio que se está configurando con este enlace.
El siguiente procedimiento muestra cómo utilizar la clase NetTcpBinding para abrir un punto de conexión en el URI net.tcp://localhost/MyService, primero mediante código y, a continuación, mediante los elementos de configuración.
Para habilitar la compartición de puertos de net.tcp:// en un NetTcpBinding mediante código
Cree un servicio para implementar un contrato llamado
IMyService
y llámeloMyService
.[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
Cree una instancia de la clase NetTcpBinding y establezca la propiedad PortSharingEnabled en
true
.NetTcpBinding portsharingBinding = new NetTcpBinding(); portsharingBinding.PortSharingEnabled = true;
Dim portsharingBinding As New NetTcpBinding() portsharingBinding.PortSharingEnabled = True
Cree un ServiceHost y agregue el punto de conexión de servicio a él para
MyService
que utiliza el NetTcpBinding con uso compartido de puerto habilitado y que realiza escuchas en el URI de la dirección del punto de conexión "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")
Nota
Este ejemplo utiliza el puerto TCP predeterminado 808, porque el URI de dirección de punto de conexión no especifica un número de puerto diferente. Dado que el uso compartido del puerto está habilitado explícitamente en el enlace de transporte, este servicio puede compartir el puerto 808 con otros servicios en otros procesos. Si no se permitiera el uso compartido del puerto y otra aplicación ya estuviese utilizando el puerto 808, este servicio produciría una AddressAlreadyInUseException al abrirse.
Para habilitar el uso compartido de puerto de net.tcp:// en un NetTcpBinding mediante configuración
- El ejemplo siguiente muestra cómo habilitar el uso compartido de puerto y agregar el punto de conexión de servicio mediante elementos de configuración.
<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>