0

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

我对客户端上的服务器调用方法有疑问。最后一次通话需要很长时间(近 2 分钟)或被忽略

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

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

第一个电话是立即的,第二个电话也立即开始,但需要 2 分钟才能被客户接听。

Fiddler 输出(第二列显示经过的时间):http: //i.stack.imgur.com/BFQi4.png

第二种情况:一通需要2s,一通未接

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

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

Fiddler 输出(第 2 列显示经过的时间):http: //i.stack.imgur.com/Yj1fw.png

最后一个案例:最后一个调用需要 2s

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

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

Fiddler 输出(第二列显示经过的时间):http: //i.stack.imgur.com/O7p0Y.png

客户端上的代码是

await hubProxy.Invoke("TestMethod");

* 编辑 *

在客户端我有一个服务,它为服务器上找到的每个集线器创建一个 hubproxy:

    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

0

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

于 2013-10-11T06:34:38.907 回答