21

我有一个使用 ServiceHostFactory 在 IIS 上运行的 WCF 服务。它与 WSHttpBinding 一起运行良好,但由于速度和一切都在同一个网络上(没有防火墙),我想使用 NetTcpBinding 来加快速度。

当我尝试这样做时,我收到此错误:

无法连接到 net.tcp://zzz.xxx.yyy/MyService.svc。连接尝试持续了 00:00:01.0464395 的时间跨度。TCP 错误代码 10061:无法建立连接,因为目标机器主动拒绝 xxxx: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 框架的服务创建通道。您可能会遇到 HTTP 端点。

4

7 回答 7

23

如果您使用的是 Vista,请确保 WAS 和 Net.Tcp 侦听器适配器服务正在运行。

于 2009-04-23T09:25:18.740 回答
15

对于遇到此问题的任何人,我的 net.tcp WCF 问题故障排除指南如下:

  1. 检查 net.tcp 是否为网站启用的协议(在 IIS 中,右键单击该网站,转到高级设置,并确保启用的协议包括“net.tcp”
  2. 我不确定这是否是偏执狂,我也一直需要通过命令行以及步骤 1 为站点启用 net.tcp。打开命令提示符,然后从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 侦听器适配器”服务是否正在运行。

完毕。

于 2012-03-16T10:44:45.060 回答
14

查看这篇关于在 IIS 7.0 中启用非 HTTP 绑定的帖子。默认情况下,您必须在 IIS 7.0 中显式启用 net.tcp。

希望这可以帮助。

更新:

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

于 2008-10-14T13:01:07.203 回答
7

一旦我启动 Net.Tcp 侦听器适配器服务,服务对我来说工作正常。

于 2010-10-15T19:54:35.407 回答
1

会不会像服务主机上的防火墙规则不允许端口 808 一样简单?

于 2008-10-14T12:49:27.757 回答
1

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

于 2010-12-13T14:30:55.970 回答
1

我在 Window Server 2008 R2 上也遇到了这个问题

只需确保 Net.Tcp 端口共享服务也已启动,因为它是 Net.Tcp 侦听器适配器的依赖项。

于 2015-03-30T12:00:28.967 回答