Клиент SignalR .NET не запускает события при потере сетевого подключения

У меня есть приложение WPF, которое подключается к WebAPI, на котором работает SignalR. Все работает нормально, пока клиент не разорвет подключение к Интернету. Когда это происходит, SignalR не запускает никаких событий на стороне клиента (StateChanged, Error, Reconnecting, Closed и т. Д.)

Код довольно прост

 public HubConnection _hubConnection;
 IHubProxy _proxy;
 public async Task ConnectToHub(string hubUrl, string hubName)
 {
      _hubConnection = new HubConnection(HubURL);
      _hubConnection.Reconnecting += hubConnection_Reconnecting; 
      _hubConnection.Closed += _hubConnection_Closed;
      _hubConnection.StateChanged += _hubConnection_StateChanged;
      proxy = hubConnection.CreateHubProxy(hubName);

      await _hubConnection.Start();  

 }


   void _hubConnection_StateChanged(Microsoft.AspNet.SignalR.Client.StateChange obj)
    {
        throw new NotImplementedException();
    }

    void _hubConnection_Closed()
    {
        throw new NotImplementedException();
    }
    void _hubConnection_Reconnectig()
    {
        throw new NotImplementedException();
    }

SignalR версии 2.2.0 Спасибо за помощь


person Sparrow_ua    schedule 08.09.2015    source источник


Ответы (2)


Попробуйте подписаться на событие Error. В зависимости от того, «как» соединение потеряно, я не думаю, что некоторые другие события будут запущены.

 _hubConnection.Error += (e=>{ ... });
person d.moncada    schedule 08.09.2015
comment
Еще одна вещь, которая иногда улавливала меня, - это размещение сервера SignalR в приложении MVC, остановка отладчика и забвение того, что ISS поддерживает его работу в фоновом режиме. Всегда проверяйте значок IIS на панели задач, чтобы убедиться, что ваше веб-приложение действительно закрылось. - person Mark Feldman; 09.09.2015

Тип транспорта в SignalR был автоматически установлен на ServerSentEvents вместо WebSockets (администратор сервера не включил его). Оказалось, что только с помощью Websockets мы можем получать события, связанные с соединением, на .Net-клиенте, когда соединение потеряно.

Согласно http://www.asp.net/signalr/overview/getting-started/introduction-to-signalr

WebSocket - единственный транспорт, который устанавливает истинное постоянное двустороннее соединение между клиентом и сервером.

person Sparrow_ua    schedule 09.09.2015