1

このアプリケーションでは、クライアント ソフトウェアは SignalR 用の .NET クライアント ライブラリを使用しています。2 つのほぼ同一の呼び出しが行われますが、実行されるのは最初の 1 つだけです。

オブジェクトは次の呼び出しを行います。

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

AddSubscription() はその親に実装されています。

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

この場合のクライアント呼び出しは、IHubProxy.Invoke() と同じタスクを返す SignalR クライアントの IHubProxy のラッパーです。_realtimeClient 自体は、最終的にはアプリケーション全体で共有される静的クライアント インスタンスです。これより前に、サーバーから送信されたイベントへの呼び出しまたはサブスクリプションに問題はありませんでした。

何らかの理由で、最初の AddSubscription だけが通過します。それらを交換すると、現在最初にある方が通過します。ステップスルーすると、両方が実行されます。

これらの両方がすぐに連続して実行されるのを妨げているのは何ですか?

編集:クライアントインスタンスは静的ですが、そのメソッドやプロパティはどれも静的ではないことを追加する必要があります。

4

1 に答える 1

2

非同期メソッド Invoke が完了するまで待って、例外が発生するかどうかを確認します。

すべてのイベントをサブスクライブしていることを確認してください。エラー イベントが発生している可能性があります。

        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);
于 2013-04-10T01:28:53.120 に答える