为什么我无法通过net.tcp连接WCF服务,但可以通过http连接?

21

我在IIS上运行一个使用ServiceHostFactory的WCF服务。使用WSHttpBinding时它能正常运行,但由于速度和所有东西都在同一网络上(没有防火墙),我想使用NetTcpBinding来加快速度。

当我尝试这样做时,我会收到以下错误:

  

无法连接到net.tcp://zzz.xxx.yyy/MyService.svc。连接尝试持续了00:00:01.0464395。TCP错误代码10061:由于目标计算机积极拒绝,因此无法建立连接 x.x.x.x:808。

我正在使用SecurityMode.None,只是为了确保它不会影响我的工作,而且我在两次尝试中都尝试了以下任意一种方法:

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

另外我要指出的是,我正在从一个服务调用中提取大量数据,所以我在 HTTP 和 TCP 尝试上都设置了 maxMessageSize 为 1000000。

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

让它工作起来应该很容易,那我错过了什么?

更新:我将TCP端口808添加到网站标识中并重试。现在出现以下错误:

您尝试创建到不支持.Net Framing的服务的通道。您可能会遇到HTTP端点。

7个回答

23
如果您正在使用Vista,则请确保WAS和Net.Tcp Listener Adapter服务正在运行。

2
+1 那个 Net.Tcp 监听器适配器服务因某种原因被关闭了 :/ 干杯。 - Andreas Grech
1
我还需要启动Net.Tcp端口共享服务,因为它是一个依赖服务。两个服务都被禁用了。 - RandomEngy
4
WAS代表窗口进程激活服务。 - Rubens Mariuzzo

15

对于任何遇到类似问题的人,以下是我的解决net.tcp WCF问题的指南:

  1. 检查网站是否启用了net.tcp协议(在IIS中,右键单击网站,进入高级设置,并确保已启用协议包括"net.tcp"
  2. 我不确定这是否是一种偏执症,我还需要通过命令行为站点启用net.tcp,步骤同步骤1。 打开命令提示符,在 c:\windows\system32\inetsrv 中输入 appcmd.exe set app "NameOfWebsite/" /enabledProtocols:http,net.tcp
  3. 检查IIS中网站的绑定是否有net.tcp条目,并且您已将其绑定到正确的端口号(对我来说,我使用9000:*作为绑定到端口9000的设置)。 还要检查IIS中是否有其他网站正在使用相同的net.tcp绑定到该端口
  4. 检查“Net.TCP监听器适配器”服务是否正在运行。

完成。


1
谢谢!1、2和3都已经就位,但是第4个没有。对我来说,问题出在Net TCP监听器适配器(以及相关服务)没有运行!请检查Windows进程激活服务、NET TCP端口共享和Net TCP监听器适配器是否都已启动。 - Dominic Zukiewicz
1
#3 对我有用。 我有两个站点共享net.tcp:808。 即使第二个站点完全禁用,它也无法工作!! 这是我见过的唯一一个 net.tcp 端口不能跨站点共享的地方。 太棒了! - P.Brian.Mackey
对我来说很明显,要添加"net.tcp",只需在文本框中输入即可(逗号分隔列表)。 - Jess

14

请查看这篇文章,了解如何在IIS 7.0中启用非HTTP绑定。默认情况下,在IIS 7.0中必须显式启用net.tcp。

希望这可以帮到你。

更新:

看到你的评论 - 不幸的是,net.tcp不支持IIS 6.0。请查看此链接,其中详细介绍了各种主机(包括自托管、WAS和IIS)支持的WCF绑定。看起来只有HTTP绑定适用于IIS 6.0。


该服务托管在IIS6上 :( - Per Hornshøj-Schierbeck
修改了我的答案...看起来IIS6除了HTTP不支持其他任何协议。我在工作中也面临同样的问题 - 目前我们还停留在Win2003上 :( - David Mohundro
链接已失效。FYI。 - CodingYoshi
@CodingYoshi,我已将其更新为指向archive.org,因为该链接似乎已失效。 - David Mohundro

7

当我启动“Net.Tcp 监听器适配器服务”时,该服务对我来说工作得很好。


1

检查IIS是否有两个协议指向相同的端口号,我刚发现如果是这种情况,它将无法工作。


1
我也在Windows Server 2008 R2上遇到了这个问题。只需确保Net.Tcp端口共享服务也已启动,因为它是Net.Tcp侦听器适配器的一个依赖项。

1

可能只是你的服务主机上的防火墙规则不允许808端口,这很简单吗?


我刚刚仔细检查了一下,没有防火墙阻止内部流量,但还是谢谢。 - Per Hornshøj-Schierbeck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接