Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 信号服务器错过了一些对客户端方法的调用_Silverlight_Signalr_Signalr Hub_Signalr.client - Fatal编程技术网

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

Silverlight 信号服务器错过了一些对客户端方法的调用,silverlight,signalr,signalr-hub,signalr.client,Silverlight,Signalr,Signalr Hub,Signalr.client,我正在LongPolling中使用SignalrV1.1.3和SilverlightV5 我对客户端上的服务器调用方法有问题。最后一个电话可能需要很长时间(近2分钟)或被忽略 第一种情况:最后一次呼叫需要2秒 public void TestMethod(){ Clients.Caller.OnTestMethod(); Clients.Caller.OnTestMethod(); } public void TestMethod(){ Clients.Caller.OnTe

我正在LongPolling中使用SignalrV1.1.3和SilverlightV5

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

第一种情况:最后一次呼叫需要2秒

public void TestMethod(){
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
}
public void TestMethod(){
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Thread.Sleep(50);
   Clients.Caller.OnTestMethod();
}
第一个电话是即时的,第二个电话也是即时开始的,但需要2分钟才能被客户接听

小提琴手输出(第2列显示经过的时间):

第二种情况:一次通话需要2秒,一次未接

public void TestMethod(){
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
}
前两个呼叫“快速”,第三个呼叫需要2秒,最后一个从未发送

小提琴手输出(第2列显示经过的时间):

最后一个案例:最后一次通话需要2秒

public void TestMethod(){
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
}
public void TestMethod(){
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Clients.Caller.OnTestMethod();
   Thread.Sleep(50);
   Clients.Caller.OnTestMethod();
}
在最后一个睡眠之前添加睡眠可以完成呼叫

小提琴手输出(第2列显示经过的时间):

客户端上的代码是

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];
    }
publicMyHubConnection()
{
_hubConnection=新的hubConnection(ApplicationHelpers.GetServerRootUri()){TraceLevel=TraceLevel.All,TraceWriter=Console.Out};
_hubConnection.Error+=ErrorFns.HandleError;
}
公共异步任务StartAsync()
{
var time=DateTime.Now;
var manager=new EntityManager();
var serverHubs=(列表)wait manager.InvokeServerMethodAsync(“Common.SignalRServices,Common”,“GetServerHubs”);
foreach(serverHubs中的var serverHub)
{
_hubRepository[serverHub]=\u hubConnection.CreateHubProxy(serverHub);
}
等待连接。启动(新的LongPollingTransport());
}
公共IHubProxy GetHubProxy(字符串hubName)
{
if(!\u hubRepository.ContainsKey(hubName))
抛出新异常(string.Format(“没有名为“{0}”的中心,hubName));
返回_hubRepository[hubName];
}

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

我们的客户在使用SSE传输时遇到了Silverlight问题()。尝试使用longpolling,看看它是否能解决您的问题。

您可以看到,我已经在使用longpolling(我编辑了我的第一篇文章)。我将项目更新为v2-RC1,问题仍然存在。我注意到一件事,一旦最后一次(无遗漏)轮询进入挂起状态,要求服务器再次调用调用方的方法立即停止挂起的方法。然后,新的呼叫进入待定状态,需要2其他任何建议?向Repo项目提交一个问题,我们将对此进行查看。