Como forçar um ponto de extremidade net.tcp mex (mexTcpBinding) a participar do compartilhamento de portas?
Eu tenho um serviço WCF que é hospedado como um serviço do Windows. Gostaríamos de habilitar um ponto final mex no mesmo endereço (mas com o sufixo '/ mex'). Eu tenho tentado fazer isso (sem êxito) usando a seguinte configuração:
<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>
Quando executado, o host do serviço lança umAddressAlreadyInUseException
reclamando que "Já existe um ouvinte no ponto de extremidade IP 0.0.0.0:808". Isso realmente faz sentido para mim porque o serviço de compartilhamento de portas abriu essa porta para atender aoMyService
ponto final junto com qualquer outro serviço que solicite o compartilhamento dessa porta nesta máquina.
Portanto, parece que o endpoint mex deseja acesso exclusivo à porta 808. Eu posso contornar isso ajustando o endpoint mex da seguinte forma:
<endpoint
address="net.tcp://localhost:818/MyService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
Isso significa que o ponto final mex agora tem sua própria porta exclusiva. A desvantagem disso é que qualquer outro serviço que queira expor um ponto final mex também precisará de uma porta exclusiva para o ponto final mex. Isso torna muito imprevisível ao procurar pontos de extremidade mexicanos.
Existe uma maneira de forçar o endpoint mex a participar no compartilhamento de portas?