如何在VSTS构建代理上的localhost上打开TCP端口?

时间:2017-06-20 12:20:38

标签: azure-devops

使用Visual Studio Team Services的在线托管版本时,我的单元测试无法连接到在构建代理的localhost上侦听TCP端口的服务。该服务能够启动和打开TCP端口,但单元测试似乎无法访问。

错误讯息:

  

2017-06-20T12:05:00.8231306Z ## [错误] ------------   System.Net.Http.HttpRequestException:发送时发生错误   请求。 2017-06-20T12:05:00.8231306Z ## [错误] ----------------   System.Net.WebException:无法连接到远程服务器   2017-06-20T12:05:00.8231306Z ## [错误] --------------------   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 Team Services不支持在线吗?

1 个答案:

答案 0 :(得分:2)

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

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