2017-06-20 51 views
0

当使用Visual Studio Team Services的联机托管版本时,我的单元测试无法连接到在构建代理的本地主机上侦听TCP端口的服务。该服务能够启动并打开TCP端口,但对于单元测试来说似乎无法访问。如何在VSTS构建代理上的本地主机上打开TCP端口?

错误消息:

2017-06-20T12:05:00.8231306Z ## [错误] ------------ System.Net.Http.HttpRequestException:一个发送 请求时发生错误。 2017-06-20T12:05:00.8231306Z ## [error] ---------------- System.Net.WebException:无法连接到远程服务器 2017-06- 20T12:05:00.8231306Z ## [error] -------------------- System.Net.Sockets.SocketException:无法连接 ,因为目标机器积极地拒绝它127.0.0.1:41670

打开的TCP端口的服务开始:

public void Start() 
    { 
     HttpPort = ObtainFreePort(); 
     TcpPort = ObtainFreePort(); 
     ClusterVNode node = EmbeddedVNodeBuilder.AsSingleNode() 
      .WithInternalTcpOn(new IPEndPoint(IPAddress.Loopback, TcpPort)) 
      .WithExternalTcpOn(new IPEndPoint(IPAddress.Loopback, TcpPort)) 
      .WithInternalHttpOn(new IPEndPoint(IPAddress.Loopback, HttpPort)) 
      .WithExternalHttpOn(new IPEndPoint(IPAddress.Loopback, HttpPort)) 
      .AddExternalHttpPrefix($"http://+:{HttpPort}/") 
      .RunProjections(ProjectionsMode.All) 
      .StartStandardProjections() 
      .RunInMemory() 
      .Build(); 
     node.StartAndWaitUntilReady().Wait(); 
    } 

    static int ObtainFreePort() 
    { 
     using (var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) 
     { 
      sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); 
      var port = ((IPEndPoint)sock.LocalEndPoint).Port; 
      sock.Close(); 
      return port; 
     } 
    } 

这确实我的本地机器上工作:)这难道不是在Visual Studio团队服务支持线上?

回答

1

如果您使用托管代理,则无法打开端口或更改有关机器配置的任何内容。您需要设置自己的代理进行构建。

此外,如果测试需要TCP通信,则不再是单元测试。单元测试没有外部依赖性。

+0

是的,我们称这些测试集成测试是准确的。太糟糕了,这是不可能的,我们必须建立我们自己的代理人..但谢谢你的答案! –