Tengo un servicio WCF alojado como un servicio de Windows. Nos gustaría habilitar un punto final mex en la misma dirección (pero con un sufijo '/ mex'). He estado tratando de hacer esto (sin éxito) con la siguiente configuración:Cómo forzar un punto final net.tcp mex (mexTcpBinding) para participar en el intercambio de puertos?
<system.serviceModel>
<services>
<service
name="MyCompany.MyService"
behaviorConfiguration="defaultServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost"/>
</baseAddresses>
</host>
<endpoint
address="MyService"
binding="netTcpBinding"
contract="MyCompany.IMyService"
bindingConfiguration="netTcpBindingConfig"
/>
<endpoint
address="MyService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="defaultServiceBehavior">
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="netTcpBindingConfig" portSharingEnabled="true" />
</netTcpBinding>
</bindings>
</system.serviceModel>
Cuando se ejecuta, el host de servicio se emite una AddressAlreadyInUseException
quejaba de que "Ya hay un oyente en el punto final IP 0.0.0.0:808". Esto realmente tiene sentido para mí porque el servicio de puerto compartido ha abierto ese puerto para servir el punto final MyService
junto con cualquier otro servicio que solicite compartir ese puerto en esta máquina.
por lo que parece que el punto final mex quiere tener acceso al puerto 808. Exclusivo puedo solucionar este retocando el mex punto final así:
<endpoint
address="net.tcp://localhost:818/MyService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
Esto significa que el punto final Mex ahora tiene su propio puerto exclusivo . La desventaja de esto es que cualquier otro servicio que quiera exponer un punto final mex también necesitará un puerto único para su punto final mex. Esto hace que sea muy impredecible cuando se buscan puntos finales mex.
¿Hay alguna manera de forzar al punto final mex a participar en el intercambio de puertos?
Es sólo una idea: Añadir bindingConfiguration = "netTcpBindingConfig" a la Mex punto final? –
@Torben Sí, lo intenté. Cuando lo hago, el punto final mex no tiene problemas para compartir, pero no puede generar ningún metadato. –