J'ai un service WCF hébergé en tant que service Windows. Nous aimerions activer un point de terminaison mex à la même adresse (mais avec un suffixe '/ mex'). J'ai essayé de le faire (sans succès) en utilisant la configuration suivante:Comment forcer un point de terminaison net.tcp mex (mexTcpBinding) à participer au partage de port?
<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>
Quand il fonctionne, l'hôte de service lève une AddressAlreadyInUseException
plaint que « Il y a déjà un écouteur sur IP endpoint 0.0.0.0:808 ». Cela a un sens pour moi parce que le service de partage de port a ouvert ce port afin de desservir le point de terminaison MyService
avec tous les autres services demandant de partager ce port sur cette machine.
Il semble donc que le point de terminaison MEX veut avoir accès exlusive au port 808. Je peux contourner ce en modifiant légèrement le point de terminaison MEX comme ceci:
<endpoint
address="net.tcp://localhost:818/MyService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
Cela signifie que le point de terminaison MEX a maintenant son propre port exclusif . L'inconvénient avec cela est que tout autre service qui veut exposer un point de terminaison mex aura également besoin d'un port unique pour son point de terminaison mex. Cela le rend très imprévisible lors de la recherche de points de terminaison mex.
Existe-t-il un moyen de forcer le point de terminaison mex à participer au partage de port?
Juste une pensée: Ajouter bindingConfiguration = « netTcpBindingConfig » au point d'extrémité MEX? –
@Torben Oui, j'ai essayé ça. Quand je fais cela, le point de terminaison mex n'a pas de problème de partage, mais il échoue complètement à produire des métadonnées. –