私の教育におけるプロジェクトの一環として、私はいくつかの.netリアルタイム通信アプローチのパフォーマンステストを行っています。それらの1つはSignalerです。このため、私には2つのプログラムがあります。
- ServerHostApp-単一のハブを公開するMicrosoft.AspNet.SignalR.Hosting.Self.Serverを備えたWPFアプリケーション。
- ClientHostApp-多くのSignalerクライアントをホストする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;
}
ClientHostApp:
//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インスタンスから1つのクライアントに接続しようとすると、成功します。ただし、2つ以上のクライアントに接続しようとすると、ハブのAcknowledgeConnectionメソッドが実行されないのに対し、ClientHostAppプログラムは応答なしでハングします。不思議なことに、クライアントマシンでFiddler2を起動すると、すべてのクライアントが接続され、テストを実行できます。
私がここで何が欠けているか知っていますか?ありがとう。