在我们的应用程序中,客户端软件正在使用SignalR的.NET客户端库。两个几乎完全相同的调用,但只执行第一个调用。
一个对象进行以下调用:
AddSubscription(typeof(ObjA).Name);
AddSubscription(typeof(ObjB).Name);
AddSubscription()在其父级上实现:
_subscribedTypes.Add(type);
_realtimeClient.Invoke("Subscribe", type);
在这种情况下,客户端调用是SignalR客户端的IHubProxy的包装器,它返回与IHubProxy.Invoke()相同的任务。 _realtimeClient本身最终是在整个应用程序中共享的静态客户端实例。在此之前,我们对调用或订阅服务器发送的事件没有任何问题。
无论出于何种原因,只有第一个AddSubscription会通过。如果我交换它们,那么现在首先将通过它。如果我单步执行,它们都会执行。
什么可能阻止这些直接连续执行?
编辑:我应该添加,当客户端实例是静态的时,它的方法或属性都不是。
答案 0 :(得分:2)
等待异步方法调用完成以查看是否出现异常: _realtimeClient.Invoke(“订阅”,键入).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);