我们有一个带有多个客户端的 WCF 服务来安排客户端之间的操作。它在 XP 上运行良好。转移到win7,我只能将客户端连接到同一台机器上的服务器。在这一点上,我认为这与 IPv6 有关,但我对如何进行感到困惑。

尝试连接到远程服务器的客户端出现以下异常:



服务配置如下:

<system.serviceModel>
  <services>
     <service
         name="SchedulerService"
         behaviorConfiguration="SchedulerServiceBehavior">
        <host>
           <baseAddresses>
              <add baseAddress="net.tcp://localhost/zetec/Service/SchedulerService"/>
           </baseAddresses>
        </host>
        <endpoint address="net.tcp://localhost:18297/zetec/Service/SchedulerService/Scheduler"
                  binding="netTcpBinding"
                  bindingConfiguration = "ConfigBindingNetTcp"
                  contract="IScheduler" />
        <endpoint address="net.tcp://localhost:18297/zetec/Service/SchedulerService/Scheduler"
                  binding="netTcpBinding"
                  bindingConfiguration = "ConfigBindingNetTcp"
                  contract="IProcessingNodeControl" />
     </service>
  </services>
  <bindings>
     <netTcpBinding>
        <binding name = "ConfigBindingNetTcp" portSharingEnabled="True">
           <security mode="None"/>
        </binding>
     </netTcpBinding >
  </bindings>

  <behaviors>
     <serviceBehaviors>
        <behavior name="SchedulerServiceBehavior">
           <serviceDebug includeExceptionDetailInFaults="true" />
           <serviceThrottling maxConcurrentSessions="100"/>
        </behavior>
     </serviceBehaviors>
  </behaviors>
</system.serviceModel>

客户端连接如下:
String endPoint = "net.tcp://" + GetIPV4Address(m_SchedulerHostAddress) + ":" + m_SchedulerHostPort.ToString(CultureInfo.InvariantCulture) + "/zetec/Service/SchedulerService/Scheduler";

NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;

m_Channel = new DuplexChannelFactory<IProcessingNodeControl>(this, binding, endPoint);
m_IProcessingNodeControl = m_Channel.CreateChannel();

我已经检查了我的防火墙大约十几次,但我想我可能遗漏了一些东西。尝试禁用 Windows 防火墙。我尝试将 localhost 更改为我的 ipv4 地址以尝试远离 ipv6,我尝试删除任何反 ipv6 代码。

不知道这是否意味着什么,但是:



不幸的是,telnet 测试似乎不是关键。服务运行时,我已成功从本地主机和远程计算机连接到我的服务端口,但我的客户端无法从远程计算机运行。

看起来并不总是能保证连接到本地主机。台式机 (win7/32) 工作,笔记本电脑 (win7/64) 不工作。不过,其他 win7/64 盒子确实可以工作。也许是由于笔记本电脑上有多个网卡?也没有解释在测试人员的系统上连接失败。

我设置了两台完全禁用 IPv6 的 win7 机器(在 http://support.microsoft.com/kb/929852 中使用 0xffffffff )。没有帮助。

最佳答案

您的主机基地址和端点地址看起来有些不对劲。一个有明确的端口引用,另一个没有。通常,当您使用基地址时,您会在端点地址中使用相对 URL。

我想不出为什么这会与 IPv6 相关,因为没有一条错误消息提到 IPv6 地址。

也许在禁用 net.tcp 端口共享选项后重试。如果没有端口共享,您应该能够像您一样使用 telnet 确认连接。

另外,您的服务是如何在 Win7 中托管的?在 IIS7 中还是自己托管在 Windows 服务中?将它托管在服务中可能需要向您的 exe 授予一些权限,而不是在防火墙上打开端口(就像您有时必须在 Win XP 中以 HTTP 托管 Windows 服务一样)。

抱歉,我很忙,无法查找这些网址。

关于Win7 上的 WCF Duplex net.tcp 问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2434711/

10-10 13:37