21
votes

I have a WCF service running on the IIS with a ServiceHostFactory. It's running fine with the WSHttpBinding but because of the speed and everything being on the same network (no firewalls) i want to speed up things a bit using the NetTcpBinding instead.

When i try to do that i get this error:

Could not connect to net.tcp://zzz.xxx.yyy/MyService.svc. The connection attempt lasted for a time span of 00:00:01.0464395. TCP error code 10061: No connection could be made because the target machine actively refused it x.x.x.x:808.

I'm using SecurityMode.None just to make sure that is not screwing me also i tried either of these on two different tries:

binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
binding.Security.Message.ClientCredentialType = TcpClientCredentialType.Windows;,

Also i should point out, that i'm pulling quite a lof of data from one of the service calls, so i also put these (both on the http and the tcp attempts - setting maxMessageSize to 1000000)

binding.MaxReceivedMessageSize = maxMessageSize;
binding.ReaderQuotas.MaxArrayLength = maxMessageSize;

It should be pretty easy getting it to work, so what am I missing?

UPDATE: I added the TCP port 808 to the website identity and tried again. Now i get this error:

You have tried to create a channel to a service that does not support .Net Framing. It is possible that you are encountering an HTTP endpoint.

7

7 Answers

23
votes

If you are using Vista, then ensure the WAS and Net.Tcp Listener Adapter Services are running.

15
votes

For anyone that stumbles accross this, my guide to trouble-shooting net.tcp WCF issues like this:

  1. Check that net.tcp is an enabled protocol for the web site (in IIS, right-click the site, goto advanced settings, and ensure that Enabled Protocols includes "net.tcp"
  2. I'm not sure if this is a paranoia thing, I also have always needed to enable net.tcp for the Site via the command line as well as step 1. Open a command prompt, and from c:\windows\system32\inetsrv, enter appcmd.exe set app "NameOfWebsite/" /enabledProtocols:http,net.tcp
  3. Check that the bindings for the website in IIS have an entry for net.tcp, and that you've bound it to the correct port number (for me, I use 9000:* as my binding to port 9000). Also check that no other websites in IIS are using the same net.tcp binding to that port
  4. Check that the "Net.TCP Listener Adapter" service is running.

Done.

14
votes

Check out this post on enabling non-HTTP bindings in IIS 7.0. By default, you have to explicitly enable net.tcp in IIS 7.0.

Hope this helps.

UPDATE:

Saw your comment - unfortunately, net.tcp is not supported in IIS 6.0. Check out this link which details the supported WCF bindings for various hosts (including self-hosting, WAS, and IIS). Looks like only HTTP bindings work in IIS 6.0.

7
votes

Once i start Net.Tcp Listener Adapter Service, service is working fine for me.

1
votes

Could it be something as simple as your firewall rules on the service host disallowing port 808?

1
votes

check if IIS has both protocol pointing to same port number,i just found if that is the case,it will not work.

1
votes

I was also having this issue on Window Server 2008 R2

Just ensure that the Net.Tcp Port Sharing service is also started, as it is a dependency of the Net.Tcp Listener Adapter.