I started lately learning WCF and going step by step with the concepts. However, today I was stuck by how to generate a proxy client class for a Host application that exposes a Service with a TCP endpoint.
Assume in the App.config configuration file, in the Host application (Console Application), you have the following configuration:
<system.serviceModel>
<services>
<service name="WCFFromScratch.Service1" behaviorConfiguration="serviceBehavior">
<endpoint address="Service1" binding="netTcpBinding" contract="WCFFromScratch.IService1" />
<endpoint contract="IMetadataExchange" binding="mexTcpBinding" address="mexTcp" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:9000"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
The first important thing to notice in the above is the line in bold. Using the *mexTcpBinding* enables exposing meta data for the TCP endpoint and hence, using now the Svcutil.exe as follows:
c:\Program Files\Microsoft Visual Studio 9.0\VC>svcutil /d:C:\ /o:serviceProxy.cs /config:app.config net.tcp://localhost:9000/mexTcp
The above is enough to generate a new proxy client class named *serviceProxy.cs* located in the *C:\* drive.
Notice how I used the *mexTcp* address, which is the one that exposes meta-data for the SvcUtil in order to be able to generate the proxy.
For more information on publishing meta-data for a service, check the following: How to: Publish Metadata for a Service Using a Configuration File
Hope this helps,
Regards
Tags: WCF