无法连接到net.tcp:连接尝试持续了一段时间

时间:2012-12-21 00:56:20

标签: c# wcf

在远程构建机器上,运行单元测试时出现以下错误。

测试方法MyNameSpace1.MyNameSpace2.Service.Test.MyPath.XYZServiceTest.FindRecord抛出异常: System.ServiceModel.EndpointNotFoundException:无法连接到net.tcp://localhost/MyABCServices/XYZService.svc。连接尝试持续时间跨度为00:00:02.0086605。 TCP错误代码10061:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:808。 ---> System.Net.Sockets.SocketException:无法建立连接,因为目标计算机主动拒绝它127.0.0.1:808

我对此构建计算机的访问权限非常有限。我无法在构建机器上访问iis,也无法访问我在本地开发机器上执行的服务。单元测试在我的本地开发机器上运行,但它们在构建机器上运行上面提到的错误。

如何调试此错误?我看过像检查防火墙等的东西但是我不知道怎么做?我无法检查此服务的Windows服务是否已在构建计算机上运行。我试图登录到构建机器或将我的IIS连接到这台远程机器,但我不能。

5 个答案:

答案 0 :(得分:9)

对我来说,最常见的问题是Windows Service Net.Tcp侦听器适配器未在主机上运行。

同时检查IIS Web应用程序以确保Enabled Protocols包含net.tcp。例如我有“http,net.tcp”,在我的绑定中我有“http::94:,net.tcp:194:

我不知道有什么好方法可以远程检查IIS配置是否正确或Windows服务是否正在运行。您没有可以为您查看这些值的服务器管理员吗?

答案 1 :(得分:8)

Starting the Net.Tcp Listener Adapter service has fixed the problem.

启动Net.Tcp侦听器适配器服务已修复此问题。

答案 2 :(得分:2)

127.0.0.1:808是否为实际IP:错误中报告的端口?如果是,那么您需要修复IP(127.0.0.1localhost同义,因此这将是您的本地计算机。)

否则,这看起来像是防火墙问题。

防火墙有两个常见的来源:

  • 路由器
  • OS

路由器防火墙通常位于将内部网络连接到互联网的路由器上。在这些情况下,您(或有访问权限的人)将需要登录路由器并将端口转发到计算机的IP。仅当尝试通信的两台计算机不在同一内部网络上时,才需要这样做 例如,如果您的计算机通过Internet连接到服务器,则需要设置端口转发。如果两台计算机位于同一办公室的同一网络上,则不需要端口转发(大多数公司都不常见这种情况,但是有一个IT或网络人员来处理端口问题)。

假设您的服务器运行的是Windows,则需要具有管理员(?)访问权限的用户才能登录并打开端口或允许您的服务接受传入请求。由于您表示您无权访问服务器,我建议负责服务器的人员验证配置。

答案 3 :(得分:1)

正如我所读到的那样,“单元测试”显然需要一些本地主机地址的WCF net.tcp端点。所以,为了工作,你可以

  • 在构建服务器上添加所需的服务,该服务器可能是共享服务器,或者由其他团队拥有,或者我不了解的其他一些问题,或者
  • 更改单元测试,以便它不会期望真正的实时WCF服务,而是模拟或伪造的服务。

我(显然)推荐第二种选择。

答案 4 :(得分:0)

感谢@sandeep和@Erik为我指出正确的方向。我的是Windows 10系统。我没有.NetTcpListender适配器。我有Net.tcp端口共享服务,并且已被禁用。我启用了它并启动了服务,它运行良好。现在,我将两个端点托管在如下所示的相同端口上

<services>
      <service behaviorConfiguration="mybehaviorConfiguration" name="FirstClass">
        <endpoint address="" binding="netTcpBinding" contract="IFirstClass"
           bindingConfiguration="netTcpBindingConfiguration" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:5000/MyService/FirstClass" />
          </baseAddresses>
        </host>
      </service>

      <service behaviorConfiguration="mybehaviorConfiguration" name="SecondClass">
        <endpoint address="" binding="netTcpBinding" contract="ISecondClass"
           bindingConfiguration="netTcpBindingConfiguration" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:5000/MyService/SecondClass" />
          </baseAddresses>
        </host>
      </service>
</services>

enter image description here