How to configure net.tcp binding for a client in WCF

I am new to WCF services and I created the same application using WCF. Below is the base code:

IService1.cs :

 [ServiceContract] public interface IService1 { [OperationContract] string GetData(int value); [OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); [OperationContract] String WelComeMessage(String name); } 

Service1.svc.cs :

 public class Service1 : IService1 { public string GetData(int value) { return string.Format("You entered: {0}", value); } public CompositeType GetDataUsingDataContract(CompositeType composite) { if (composite == null) { throw new ArgumentNullException("composite"); } if (composite.BoolValue) { composite.StringValue += "Suffix"; } return composite; } public String WelComeMessage(String name) { return String.Format("{0}, Welcome to http://www.csharptutorial.in", name); } } 

and web.config :

 <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration> 

I want this net.tcp service ready, can someone help me figure out where to declare the net.tcp binding and how to use it using the net.tcp binding?

Change 1:

I updated the server configuration file (in the WCF service configuration file) below:

 <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> <services> <service name="DemoWCF.Service1" behaviorConfiguration="MyServiceBehavior"> <endpoint name="NetTCPBinding_IService1Client" address="net.tcp://localhost:10109/Service1.svc" binding="netTcpBinding" bindingConfiguration="EndPointConfiguration" contract="DemoWCF.IService1" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:10109/Service1" /> </baseAddresses> </host> </service> </services> <bindings> <netTcpBinding> <binding name="NetTCPBinding_IService1" sendTimeout="00:01:00"> <security mode="None" /> </binding> </netTcpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceMetadata httpGetEnabled="false"/> <serviceDebug includeExceptionDetailInFaults="false"/> <dataContractSerializer maxItemsInObjectGraph="65536" /> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration> 

And below is the client side code:

 static void Main(string[] args) { try { Service1Client service1Client = new Service1Client("NetTCPBinding_IService1"); Console.WriteLine(service1Client.WelcomeMessage("Hello from net.tcp")); Console.ReadLine(); } catch (Exception ex) { throw ex; } } 

But it throws an exception:

Exception:. You tried to create a channel for a service that does not support .Net Framing. You may have encountered an HTTP endpoint.

Internal exception:

{"The expected record type is" PreambleAck ", found" 72. " }

Edit 2:

I hosted my WCF service in IIS 7.5 and added the net.tcp binding using the edit binding parameter .... and also from the command line:

set the site "DemoWCF" - + bindings. [protocol = 'net.tcp', bindingInformation = '10108: *']

The web service works great.

enter image description here

But consuming this client-side WCF service is still the same.

Client code:

 try { ServiceReference1.Service1Client s = new ServiceReference1.Service1Client(); Response.Write(s.WelcomeMessage("Hello from net.tcp")); Response.End(); } catch (Exception ex) { Response.Write(ex); Response.End(); } 

Web.config client:

 <bindings> <netTcpBinding> <binding name="NetTCPBinding_IService1Client"> <security mode="None" /> </binding> </netTcpBinding> </bindings> <client> <endpoint address="net.tcp://localhost:10108/Service1.svc" binding="netTcpBinding" bindingConfiguration="NetTCPBinding_IService1Client" contract="ServiceReference1.IService1" name="NetTCPBinding_IService1Client" /> </client> 

Same exception:. You tried to create a channel for a service that does not support .Net Framing. You may have encountered an HTTP endpoint.

Internal exception:

{"The expected record type is" PreambleAck ", found" 72. " }

Edit 3:

I tried to use the service and under the code below:

 IService1 vService; NetTcpBinding b = new NetTcpBinding(); b.Security.Mode = SecurityMode.Message; b.Security.Message.ClientCredentialType = MessageCredentialType.Windows; EndpointAddress vEndPoint = new EndpointAddress("net.tcp://localhost:10108/Service1/"); ChannelFactory<IService1> cf = new ChannelFactory<IService1>(b, vEndPoint); vService = cf.CreateChannel(); try { Response.Write("Result from the system " + vService.WelcomeMessage("Hello")); } catch (Exception ex) { Response.Write("Error Occured while connection establish to " + vEndPoint.Uri.ToString()); } Response.End(); 

Still getting the same exception, can anyone help?

+6
source share
1 answer

You need something like this

 <system.serviceModel> <services> <service name="MyApp.Service1" behaviorConfiguration="MyServiceBehavior"> <endpoint name="MyEndPoint" address="net.tcp://localhost:9000/Service1" binding="netTcpBinding" bindingConfiguration="EndPointConfiguration" contract="MyApp.IService1" /> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:9000/Service1" /> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceDebug includeExceptionDetailInFaults="True" /> <dataContractSerializer maxItemsInObjectGraph="65536" /> </behavior> </serviceBehaviors> </behaviors> <bindings> <netTcpBinding> <binding name="EndPointConfiguration" sendTimeout="00:01:00"> <security mode="None" /> </binding> </netTcpBinding> </bindings> 

'MyApp.Service1' - means the full name of the service, including the namespace. "MyApp.IService1" - means the full name of the service interface, including the namespace that the service implements.

+3
source

All Articles