2013-04-09 58 views
1

在我们的应用程序中,客户端软件正在使用SignalR的.NET客户端库。两个几乎完全相同的调用被创建,但只有第一个执行。某些顺序SignalR调用丢失

一个目的提出下列调用:

AddSubscription(typeof(ObjA).Name); 
AddSubscription(typeof(ObjB).Name); 

AddSubscription()被其父实施:

_subscribedTypes.Add(type); 
_realtimeClient.Invoke("Subscribe", type); 

客户端在这种情况下调用是IHubProxy为SignalR客户一个封装器,返回与IHubProxy.Invoke()相同的任务。 _realtimeClient本身最终是一个在应用程序中共享的静态客户端实例。我们在调用或订阅服务器发送的事件之前没有问题。

无论出于何种原因,只有第一个AddSubscription会通过。如果我交换它们,那么现在先通过的任何一个都会通过。如果我通过,他们都执行。

什么可能会阻止这两者立即连续执行?

编辑:我应该补充一点,虽然客户端实例是静态的,但它的方法或属性都不是。

回答

2

等待异步方法调用以完成以查看是否收到异常: _realtimeClient.Invoke(“Subscribe”,type).Wait();

确保您订阅的所有事件,你可能有一个错误事件

 var hubConnection = new HubConnection("http://url/"); 
     hubConnection.TraceWriter = Console.Out; 
     hubConnection.Closed +=() => Console.WriteLine("hubConnection.Closed"); 
     hubConnection.ConnectionSlow +=() => Console.WriteLine("hubConnection.ConnectionSlow"); 
     hubConnection.Error += (error) => Console.WriteLine("hubConnection.Error {0}: {1}", error.GetType(), error.Message); 
     hubConnection.Reconnected +=() => Console.WriteLine("hubConnection.Reconnected"); 
     hubConnection.Reconnecting +=() => Console.WriteLine("hubConnection.Reconnecting"); 
     hubConnection.StateChanged += (change) => Console.WriteLine("hubConnection.StateChanged {0} => {1}", change.OldState, change.NewState);