I'm a bit confused of how to expose an endpoint in WCF
I've got a tcp endpoint and a mex tcp endpoint.
<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>
When I try to run this in the service host I get the following exception :
The contract name 'IMetadataExchange' could not be found in the list of contracts
implemented by the service MessageReaderService. Add a ServiceMetadataBehavior to the
configuration file or to the ServiceHost directly to enable support for this contract.
So I conclude from this error that I need to add a service behavior to expose metadata.
So I added the behavior :
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
but then I get a different error :
The HttpGetEnabled property of ServiceMetadataBehavior is set to true and the
HttpGetUrl property is a relative address, but there is no http base address. Either
supply an http base address or set HttpGetUrl to an absolute address.
- So now I have to actually add another endpoint (http) to expose the metadata over mexhttpbinding ?
- is there a simple way to expose the endpoint over tcp ?
Best Answer
Two things:
(1) once you've defined the service behavior, you of course must also apply it to the service!
(2) you don't need an HTTP endpoint - you don't need to have an HTTP URL - just define this service behavior like this:
Your metadata is now available over a
mexTcpBinding
endpoint - you cannot browse to it using HTTP, but a client can definitely connect to it and use it!You can verify this by using the WCF Test Client and going to either
or
in both cases, the WCF Test Client should now find your service and be able to discover its capabilities.