【问题标题】:Why can't I connect to a WCF service with net.tcp but i can with http?为什么我不能使用 net.tcp 连接到 WCF 服务,但我可以使用 http?
【发布时间】:2010-09-17 02:12:08
【问题描述】:

我有一个 WCF 服务在带有 ServiceHostFactory 的 IIS 上运行。使用 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 框架的服务创建通道。您可能遇到了 HTTP 端点。

【问题讨论】:

    标签: wcf tcp iis-6


    【解决方案1】:

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

    【讨论】:

    • +1 Net.Tcp 侦听器适配器服务因某种原因被关闭:/欢呼。
    • 我还必须启动 Net.Tcp 端口共享服务,因为它是一个依赖服务。两者都被禁用。
    • WAS 代表窗口进程激活服务
    【解决方案2】:

    对于遇到此问题的任何人,我的解决 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 Listener Adapter”服务是否正在运行。

    完成。

    【讨论】:

    • 谢谢! 1,2 和 3 已经到位,但没有 4。这是 Net TCP 侦听器适配器(和相关服务)没有为我运行!检查 Windows Process Activation Services、NET TCP Port Sharing 和 Net TCP Listener Adapter 是否都已启动
    • #3 为我工作。我有两个站点共享 net.tcp:808。即使第二个站点被完全禁用,它也不起作用!!这是我看到的唯一一个 net.tcp 端口不能跨站点共享的地方。很棒的信息!
    • 这对我来说很明显,但要添加“net.tcp”,只需在文本框中输入它(逗号分隔列表)。
    【解决方案3】:

    查看this post 在 IIS 7.0 中启用非 HTTP 绑定。默认情况下,您必须在 IIS 7.0 中显式启用 net.tcp。

    希望这会有所帮助。

    更新:

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

    【讨论】:

    • 该服务托管在 IIS6 上:(
    • 修改了我的答案...看起来 IIS6 除了 HTTP 不支持任何东西。我在同一条船上工作 - 我们现在被困在 Win2003 上:(
    • 链接已失效。仅供参考。
    • @CodingYoshi 我将其更新为指向archive.org,似乎该链接已消失。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 我只是仔细检查了一下,没有防火墙阻止内部流量,但是谢谢。
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

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

        【讨论】:

          猜你喜欢
          • 2013-10-10
          • 1970-01-01
          • 2014-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-08
          • 2023-03-15
          • 2021-03-30
          相关资源
          最近更新 更多