问题
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.
回答1:
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.
回答2:
If you are using Vista, then ensure the WAS and Net.Tcp Listener Adapter Services are running.
回答3:
For anyone that stumbles accross this, my guide to trouble-shooting net.tcp WCF issues like this:
- 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"
- 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
, enterappcmd.exe set app "NameOfWebsite/" /enabledProtocols:http,net.tcp
- 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
- Check that the "Net.TCP Listener Adapter" service is running.
Done.
回答4:
Once i start Net.Tcp Listener Adapter Service, service is working fine for me.
回答5:
Could it be something as simple as your firewall rules on the service host disallowing port 808?
回答6:
check if IIS has both protocol pointing to same port number,i just found if that is the case,it will not work.
回答7:
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.
来源:https://stackoverflow.com/questions/201004/why-cant-i-connect-to-a-wcf-service-with-net-tcp-but-i-can-with-http