Windows サービスとしてホストされている WCF サービスがあります。同じアドレスで mex エンドポイントを有効にしたいと考えています (ただし、'/mex' サフィックス付き)。次の構成を使用してこれを(失敗して)実行しようとしました:
<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>
実行すると、サービス ホストはAddressAlreadyInUseException
「IP エンドポイント 0.0.0.0:808 にリスナーが既に存在します」という不平をスローします。MyService
ポート共有サービスは、このマシンでそのポートを共有することを要求する他のサービスと共にエンドポイントにサービスを提供するためにそのポートを開いているため、これは実際には私には理にかなっています。
そのため、mex エンドポイントはポート 808 への排他的アクセスを望んでいるようです。mex エンドポイントを次のように調整することで、これを回避できます。
<endpoint
address="net.tcp://localhost:818/MyService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
/>
これは、mex エンドポイントが独自の専用ポートを持つようになったことを意味します。これの欠点は、mex エンドポイントを公開したい他のサービスでも、その mex エンドポイント用に一意のポートが必要になることです。これにより、mex エンドポイントを探すときに予測が非常に難しくなります。
mex エンドポイントを強制的にポート共有に参加させる方法はありますか?