Ich habe einen WCF-Dienst, der als Windows-Dienst gehostet wird. Wir möchten einen mex-Endpunkt unter der gleichen Adresse (aber mit einem Suffix '/ mex') aktivieren. Ich habe versucht, diese (erfolglos) mit folgenden Konfiguration zu tun:Wie erzwinge ich einen net.tcp mex-Endpunkt (mexTcpBinding), um an Port-Sharing teilzunehmen?
<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>
Wenn es läuft, der Service Host ein AddressAlreadyInUseException
beschweren, dass „Es gibt bereits einen Zuhörer auf IP-Endpunkt 0.0.0.0:808“ wirft. Dies ist für mich sinnvoll, da der Port-Sharing-Dienst diesen Port geöffnet hat, um den Endpunkt MyService
zusammen mit anderen Diensten zu bedienen, die diesen Port auf diesem Rechner freigeben möchten.
So scheint es, dass der mex Endpunkt will 808. exlusive Zugriff auf Port I kann durch Zwicken des mex Endpunkt wie so dieses Problem umgehen:
<endpoint
address="net.tcp://localhost:818/MyService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
Dies bedeutet, dass der mex Endpunkt nun ein eigen exklusiv Port hat . Der Nachteil dabei ist, dass jeder andere Dienst, der einen mex-Endpunkt bereitstellen möchte, auch einen eindeutigen Port für seinen mex-Endpunkt benötigt. Dies macht es sehr unberechenbar, wenn Sie nach mex Endpunkten suchen.
Gibt es eine Möglichkeit, den mex Endpunkt zur Teilnahme an Port-Sharing zu zwingen?
Nur ein Gedanke: In bindingConfiguration = "netTcpBindingConfig" zum mex Endpunkt? –
@Torben Ja, das habe ich ausprobiert. Wenn ich das tue, hat der mex-Endpunkt keine Problemfreigabe, aber es kann vollständig keine Metadaten erzeugen. –