使用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不支持在线吗?
答案 0 :(得分:2)
如果您正在使用托管代理,则无法打开端口或更改有关计算机配置的任何内容。您需要为构建设置自己的代理。
此外,如果测试需要TCP通信,则不再是单元测试。单元测试没有外部依赖性。