12

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

测试方法 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 连接到这台远程机器,但我不能。

4

5 回答 5

12

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

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

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

于 2012-12-21T01:35:55.037 回答
11

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

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

于 2015-10-23T04:27:21.210 回答
2

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

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

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

  • 路由器
  • 操作系统

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

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

于 2012-12-21T01:25:02.880 回答
1

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

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

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

于 2012-12-21T01:41:34.720 回答
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>

在此处输入图像描述

于 2020-08-18T20:47:05.843 回答