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

C# 无法连接到net.tcp:连接尝试持续了一段时间,c#,wcf,C#,Wcf,在远程构建机器上,我在运行单元测试时遇到以下错误 测试方法MyNameSpace1.MyNameSpace2.Service.Test.MyPath.XYZServiceTest.FindRecord引发异常: System.ServiceModel.EndpointNotFoundException:无法连接到网络。tcp://localhost/MyABCServices/XYZService.svc. 连接尝试持续的时间跨度为00:00:02.0086605。TCP错误代码10061:无法

在远程构建机器上,我在运行单元测试时遇到以下错误

测试方法MyNameSpace1.MyNameSpace2.Service.Test.MyPath.XYZServiceTest.FindRecord引发异常: System.ServiceModel.EndpointNotFoundException:无法连接到网络。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连接到此远程计算机,但无法

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

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

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

  • 路由器
  • 操作系统
路由器防火墙通常位于将内部网络连接到internet的路由器上。在这些情况下,您(或具有访问权限的人)需要登录路由器并将端口转发到机器的IP。仅当尝试通信的两台计算机不在同一内部网络上时才需要此选项。
例如,如果您的计算机通过internet连接到服务器,则需要设置端口转发。如果两台计算机位于同一办公室的同一网络上,则不需要端口转发(这种情况在较大的公司中很常见,但有IT或网络人员处理端口问题)


假设您的服务器正在运行Windows,您将需要具有管理员(?)权限的人员登录,并打开端口或允许您的服务接受传入的请求。由于您指出您无权访问服务器,我建议让负责服务器的人员验证配置。

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

还要检查IIS Web应用程序,以确保启用的协议包括net.tcp。例如,我的绑定中有“http,net.tcp”,而我的绑定中有“http::94:,net.tcp:194:”

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

据我所知,“单元测试”显然希望在某个本地主机地址上有一个WCF net.tcp端点。所以,要想实现这一点,你可以

  • 在构建服务器上添加所需的服务,该服务器可能是共享服务器,或由另一个团队拥有,或我不了解的其他问题,或
  • 更改单元测试,这样它就不会期望一个真正的实时WCF服务,而是一个模拟的或伪造的服务
我(显然)推荐第二种选择。


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

感谢@sandeep和@Erik为我指明了正确的方向。我的是Windows10系统。我没有.nettcListener适配器。我有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>


许多人会说,如果单元测试访问网络或数据库,那么它就不是单元测试。它确实不是单元测试,而是系统测试,但这正是大多数人想要的,尽管人们应该同时做这两件事。不过,系统测试总比不测试好。WCF服务在构建机器上运行,单元测试就像该服务的客户端一样。它们都在同一台机器上。有一个端口阻止了从单元测试到服务的请求?在同一台机器内?我会问管理员什么样的问题?谢谢你的帮助。当我在本地开发人员机器上的IIS上设置服务时。。我根本没有遇到防火墙问题?我想知道生成计算机管理员是如何/在何处设置这些设置的,这些设置可能会影响与服务连接的单元测试。@dotnet Practicer如果服务器和客户端程序都在同一台计算机上运行,那么可能不是防火墙问题。我不能提供更多的帮助,埃里克·诺伦的回答可能是一个好的开始。其他选项是访问服务器并检查相关设置。由于您不能直接访问服务器,下一个最好的选择是设置一个您可以直接访问的测试服务器,并设置要在那里运行的东西。@dotnet从业者一个想法是,您可以将生成服务器设置为尝试连接到您的开发人员机器的WCF服务吗?您可能需要在OS防火墙中打开端口808,但如果它起作用,您将有一个短期的解决方案,直到您在构建服务器上使用WCF。太棒了!救了我的命!你是最棒的!你是最棒的,谢谢分享!我以为我要发疯了。