win7上的WCF Duplex net.tcp问题

时间:2010-03-12 17:51:03

标签: wcf windows-7 ipv6 net.tcp

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

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

  

System.ServiceModel.EndpointNotFoundException:无法连接到net.tcp://10.7.11.14:18297 / zetec / Service / SchedulerService / Scheduler。连接尝试持续时间跨度为00:00:21.0042014。 TCP错误代码10060:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应10.7.11.14:18297。 ---> System.Net.Sockets.SocketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机无法响应10.7.11.14:18297

服务配置如下:

<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代码。

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

  

Microsoft Telnet&gt;打开10.7.11.14 18297
  连接到10.7.11.14 ...无法在端口18297上打开与主机的连接:    连接失败

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

看起来并不总能保证连接到localhost。桌面(win7 / 32)工作,笔记本电脑(win7 / 64)不起作用。其他win7 / 64盒子确实有效。也许是因为笔记本电脑上有多个网卡?也没有解释在测试人员系统上连接的失败。

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

2 个答案:

答案 0 :(得分:2)

有关您的主机基地址和终点地址的信息不正确。一个有明确的端口引用,另一个没有。通常,当您使用基址时,在端点地址中使用相对URL。

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

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

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

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

答案 1 :(得分:2)

我没有时间回去测试它是否是我从ligos收到的帮助的组合,但主要修复似乎是将SMSvcHost.exe添加到Windows防火墙中的例外。

非常感谢你的帮助,ligos。我准备放弃,直到你回答我的问题。

将net.tcp添加到Windows防火墙的说明:

  1. 转到“服务”,找到net.TCP端口共享服务,然后双击它。将路径滑动到可执行文件(如果不是全部在屏幕上,请不要担心,滑动操作应将其滚动)并复制它(ctrl-c)
  2. 转到防火墙并添加一个允许通过Windows防火墙进行通信的新程序。粘贴到“服务”的路径中,然后单击“确定”。