【问题标题】:Could not connect to net.tcp: The connection attempt lasted for a time span无法连接到 net.tcp:连接尝试持续了一段时间
【发布时间】:2012-12-21 00:56:19
【问题描述】:

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

测试方法 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: No connection could be made because the target machine主动拒绝它127.0.0.1:808

我对这台构建机器的访问权限非常有限。我无法访问构建机器上的 iis 或我在本地开发机器上所做的服务。单元测试在我的本地开发机器上运行,但它们在构建机器上遇到上述错误。

我可以做些什么来调试这个错误?我已经阅读过检查防火墙等内容。但我不知道该怎么做?我无法检查此服务的 Windows 服务是否已在构建机器上启动并运行。我试图登录构建机器或将我的 IIS 连接到这台远程机器,但我不能。

【问题讨论】:

  • 很多人会说,如果一个单元测试访问网络或数据库,那么它就不是单元测试。
  • 这确实不是单元测试,而是系统测试,但这正是大多数人正在寻找的,尽管人们应该两者都做。不过,系统测试总比没有测试好。

标签: c# wcf


【解决方案1】:

对我来说最常见的问题是 Windows Service Net.Tcp Listener Adapter 没有在主机上运行。

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

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

【讨论】:

    【解决方案2】:

    启动 Net.Tcp Listener Adapter 服务已解决此问题。

    【讨论】:

    • 太棒了!救了我的命!你是最棒的!
    • 你是最棒的,谢谢分享!我以为我要疯了。
    【解决方案3】:

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

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

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

    • 路由器
    • 操作系统

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

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

    【讨论】:

    • WCF 服务在构建机器上运行,单元测试就像该服务的客户端一样。他们都在同一台机器上。有一个端口阻止了从单元测试到服务的请求?在同一台机器内?我会问管理员什么样的问题?感谢您的帮助。
    • 当我在本地开发机器上的 IIS 上设置服务时.. 我根本没有遇到防火墙问题?我想知道构建机器管理员如何/在哪里设置了这些可能影响此单元测试以连接服务的设置。
    • @dotnet-practitioner 如果服务器和客户端程序都在同一台机器上运行,那么它可能不是防火墙问题。我无法提供更多帮助,Erik Noren 的回答可能是一个不错的起点。其他选项是访问服务器并检查相关设置。由于您无法直接访问服务器,因此下一个最佳选择是设置一个您可以直接访问的测试服务器并设置为在那里运行。
    • @dotnet-practitioner 一个想法,你能设置构建服务器尝试连接到你的开发机器的 WCF 服务吗?您可能需要在您的操作系统防火墙中打开端口 808,但如果它有效,您将有一个短期的工作,直到您让 WCF 在构建服务器上工作。
    【解决方案4】:

    当我读到它时,“单元测试”显然期望在某个 localhost 地址有一个 WCF net.tcp 端点。所以,为了让它工作,你可以

    • 在构建服务器上添加所需的服务,这可能是共享服务器,或由另一个团队拥有,或其他我不知道的问题,或
    • 更改单元测试,使其不期望真正的实时 WCF 服务,而是模拟或伪造的服务。

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

    【讨论】:

      【解决方案5】:

      感谢@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>
      

      【讨论】:

        猜你喜欢
        • 2020-03-28
        • 2017-08-11
        • 2023-01-11
        • 2016-05-28
        • 2019-04-27
        • 2020-01-05
        • 1970-01-01
        • 2012-03-26
        • 2019-12-11
        相关资源
        最近更新 更多