0

LongPolling で SignalR v1.1.3 と Silverlight v5 を使用しています。

クライアントのサーバー呼び出しメソッドに問題があります。最後の呼び出しは、非常に長い時間 (2 分近く) かかるか、単に無視されます。

1 番目のケース: 最後の呼び出しに 2 秒かかります

public void TestMethod(){
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
}

1 回目の呼び出しはすぐに開始され、2 回目の呼び出しもすぐに開始されますが、クライアントにキャッチされるまでに 2 分かかります。

Fiddler 出力 (2 列目は経過時間を表示): http://i.stack.imgur.com/BFQi4.png

2 番目のケース : 1 回の通話に 2 秒かかり、1 回は不在

public void TestMethod(){
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
}

最初の 2 つの呼び出しは「高速」で、3 番目の呼び出しは 2 秒かかり、最後の呼び出しは送信されませんでした

Fiddler 出力 (2 列目は経過時間を表示): http://i.stack.imgur.com/Yj1fw.png

最後のケース: 最後の呼び出しには 2 秒かかります

public void TestMethod(){
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Thread.Sleep(50);
   Clients.Caller.OnTestMethod();
}

最後のスリープの前にスリープを追加すると、コールを実行できるようになりました。

Fiddler 出力 (2 列目は経過時間を表示): http://i.stack.imgur.com/O7p0Y.png

クライアント上のコードは

await hubProxy.Invoke("TestMethod");

* 編集 *

クライアントには、サーバー上で見つかったすべてのハブに対してハブプロキシを作成するサービスがあります。

    public MyHubConnection()
    {
        _hubConnection = new HubConnection(ApplicationHelpers.GetServerRootUri()) {TraceLevel = TraceLevels.All, TraceWriter = Console.Out};
        _hubConnection.Error += ErrorFns.HandleError;
    }

    public async Task StartAsync()
    {
        var time = DateTime.Now;

        var manager = new EntityManager(); 
        var serverHubs = (List<string>)await manager.InvokeServerMethodAsync("Common.SignalRServices, Common", "GetServerHubs");

        foreach (var serverHub in serverHubs)
        {
            _hubRepository[serverHub] = _hubConnection.CreateHubProxy(serverHub);
        }

        await _hubConnection.Start(new LongPollingTransport());
    }

    public IHubProxy GetHubProxy(string hubName)
    {
        if (!_hubRepository.ContainsKey(hubName))
            throw new Exception(string.Format("No hub named '{0}'", hubName));

        return _hubRepository[hubName];
    }

何が起こっているのかわかりません...手がかりはありますか?

4

1 に答える 1