我有一个signalR集线器的实现,并且编写了许多集成测试,其中在每个测试中,我创建一个托管在OWIN上的signalR集线器的实例,并测试该集线器。如果作为独立测试运行,则每个测试都可以正常工作。如果我一起运行所有测试,则只有第一个有效,其余的都将失败。我举了一个简单的例子来演示这个问题:
使用的大量软件包:
Microsoft.AspNet.SignalR.Client版本=“ 2.3.0”
Microsoft.AspNet.SignalR.Core版本=“ 2.3.0”
Microsoft.Owin版本=“ 4.0.0”
Microsoft.Owin.Host.HttpListener version =“ 4.0.0”
Microsoft.Owin.Hosting版本=“ 4.0.0”
Microsoft.Owin.Security版本=“ 4.0.0”
Newtonsoft.Json版本=“ 11.0.2”
测试代码
class Program
{
static void Main(string[] args)
{
string baseAddress = "http://localhost:8088/";
using (WebApp.Start<Startup>(baseAddress))
{
var connection = new HubConnection(baseAddress);
IHubProxy hub = connection.CreateHubProxy("TestHub");
connection.Start().Wait();
}
using (WebApp.Start<Startup>(baseAddress))
{
var connection = new HubConnection(baseAddress);
IHubProxy hub = connection.CreateHubProxy("TestHub");
connection.Start().Wait();
}
}
public class TestHub : Hub
{
public TestHub() { }
}
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
预期的行为
运行上面的代码,我希望创建SignalR服务器,客户端进行连接,配置信号处理程序服务器,第二次创建signalR服务器,客户端进行连接并配置信号处理程序服务器。
实际行为-引发以下异常
System.AggregateException
HResult=0x80131500
Message=One or more errors occurred.
Source=mscorlib
StackTrace:
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at SignalRTests.Program.Main(String[] args) in C:\Projects\SignalRTests\SignalRTests\Program.cs:line 25
Inner Exception 1:
TimeoutException: Transport timed out trying to connect