作为我教育项目的一部分,我正在测试几种 .net 实时通信方法的性能。其中之一是信号器。出于这个原因,我有两个程序:
- ServerHostApp - 带有 Microsoft.AspNet.SignalR.Hosting.Self.Server 的 WPF 应用程序,它公开了一个集线器。
- ClientHostApp - 托管许多信号器客户端的 WPF 应用程序
程序的典型工作流程是:启动服务器-> 使用 ClientHostApp 连接一些客户端-> 运行测试。
如果它们都托管在同一台计算机上,则这些程序可以正常工作,但是如果尝试在不同的计算机上运行这些程序,则会出现问题。特别是,我无法从单个 ClientHostApp 实例连接多个客户端。
服务器代码:
//starting up the server
public override void Start()
{
string url = "http://*:9523/MessagingServiceHostWPF/";
Server = new SignalR.Hosting.Self.Server(url);
Server.MapHubs();
Server.Start();
}
. . .
//one of the methods inside the hub exposed by the server
public DataContracts.ClientInfo AcknowledgeConnection(string handle)
{
ServerLogic.DataContracts.ClientInfo clientInfo = SignalRApplicationState.SingletonInstance.AddClient(handle, Context.ConnectionId);;
return clientInfo;
}
客户端主机应用程序:
//starting many clients in a loop
foreach (var client in _clients)
{
client.Start();
}
. . .
//method inside the Client class
public async void Start()
{
_hubConnection = new HubConnection(EndpointAddress);
_hubProxy = _hubConnection.CreateProxy("MessagingHub");
await _hubConnection.Start().ContinueWith(task =>
{
_hubProxy.Invoke<ClientLogic.MyServices.ClientInfo>("AcknowledgeConnection", Handle).ContinueWith((t) =>
{
ClientInfo = t.Result;
IsConnected = true;
});
});
}
如果我尝试从同一个 ClientHostApp 实例连接一个客户端 - 我成功了。但是,如果我尝试连接 2 个或更多客户端,则集线器上的 AcknowledgeConnection 方法永远不会执行,而 ClientHostApp 程序只是挂起而没有响应。奇怪的是,如果我在我的客户端机器上启动 Fiddler2,所有客户端都会连接起来,我可以运行我的测试。
你知道我在这里想念什么吗?谢谢。