我在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 问题。尝试使用长轮询,看看它是否能解决您的问题。