WCFでエンドポイントを公開する方法について少し混乱しています
tcpエンドポイントとmextcpエンドポイントがあります。
<service name="MessageReaderService.MessageReaderService">
<endpoint name="NetTcpReaderService"
address="ReaderService"
binding="netTcpBinding" bindingConfiguration=""
contract="Contracts.IMessageReaderService" />
<endpoint name="netTcpMex"
address="mex"
binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8082" />
</baseAddresses>
</host>
</service>
これをサービスホストで実行しようとすると、次の例外が発生します。
コントラクト名「IMetadataExchange」が、サービスMessageReaderServiceによって実装されたコントラクトのリストに見つかりませんでした。ServiceMetadataBehaviorを
構成ファイルまたはServiceHostに直接追加して、このコントラクトのサポートを有効にします。
したがって、このエラーから、メタデータを公開するためにサービス動作を追加する必要があると結論付けます。
だから私は動作を追加しました:
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
しかし、その後、別のエラーが発生します:
ServiceMetadataBehaviorのHttpGetEnabledプロパティはtrueに設定されており、HttpGetUrlプロパティは相対アドレスですが、httpベースアドレスはありません。httpベースアドレスを指定するか、HttpGetUrlを絶対アドレスに設定します。
- だから今、私は実際に別のエンドポイント(http)を追加して、mexhttpbindingを介してメタデータを公開する必要がありますか?
- tcpを介してエンドポイントを公開する簡単な方法はありますか?