Detecta ‘servidor fuera de línea’ con SignalR

Estamos intentando usar SignalR en un entorno de poco ancho de banda donde la conexión al servidor backend puede ir y venir al azar, y queremos que nuestra aplicación web responda de manera adecuada.

Parece que esta API de conexión ha estado en constante cambio durante el último año, pero de acuerdo con la documentación más reciente, he intentado conectar a $ .connection.hub.stateChanged para detectar cambios en el estado de la conexión, y recibo un par de visitas en el inicio, cuando el cliente deja de estar desconectado -> conectando -> conectado, pero cuando detengo el servidor, el controlador de eventos no se activa, y cuando vuelvo a iniciar el servidor, la mensajería en tiempo real ya no funciona.

Para probar este escenario, estoy en Windows 7 ejecutando el servidor web ASP.NET en IIS y el cliente web se está ejecutando en Google Chrome. Una vez que el sitio se está ejecutando y los mensajes se están intercambiando, anulo el sitio web en IIS y los mensajes se detienen pero el cliente no recibe ninguna notificación.

Aquí hay un fragmento rápido (utilizando TypeScript):

$.connection.hub.stateChanged((change) => { console.log("state changed..."); console.log(change); if (change.newState === $.signalR.connectionState.reconnecting) { this.raise('action:disconnected'); } else if (change.newState === $.signalR.connectionState.connected) { this.raise('action:connected'); } }); 

Cualquier orientación sería muy apreciada, gracias!

-Jeremy

¿Qué versión de SignalR estás usando? En los últimos (y anteriores), el servidor que se desconecta se detecta inmediatamente y el cambio de estado se activa con el indicador de reconexión.

Para matar el servidor, supongo que te refieres a cerrar IIS .eg iisreset. Detener el sitio web en inetmgr NO cierra el sitio, simplemente elimina el enlace Http.sys para ese puerto. Consulte https://github.com/SignalR/SignalR/issues/1148 para obtener más información.

Si quieres simular el servidor bajando mata a w3wp.