信号服务器错过了一些调用客户端方法



我在LongPolling中使用SignalR v1.1.3和Silverlight v5。

客户端上的服务器调用方法有问题。最后一个调用要么需要很长时间(接近 2 分钟(,要么干脆被忽略

第一种情况:最后一次通话需要 2 秒

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

第一个调用是即时的,第二个调用也会立即开始,但需要 2 分钟才能被客户端捕获。

提琴手输出(第二列显示经过时间(:https://i.stack.imgur.com/BFQi4.png

第二种情况:一个电话需要2秒,一个是未接

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

前两个呼叫"快速",第三个呼叫需要 2 秒,最后一个从未发送

提琴手输出(第二列显示经过时间(:https://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();
}

在最后一个睡眠之前添加睡眠允许完成调用。

提琴手输出(第 2 列显示经过时间(:https://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];
    }

我不知道发生了什么...有什么线索吗?

我们的客户在使用 SSE 传输 (https://github.com/SignalR/SignalR/issues/763( 时遇到 Silverlight 问题。尝试使用长轮询,看看它是否能解决您的问题。

最新更新