hubs hubconnection aspnet javascript signalr signalr-hub

javascript - hubconnection - signalr js events



¿Registro de excepciones de SignalR? (1)

$.connection.hub.error se usa para manejar los fallos de conexión del hub. Puede usar jQuery deferred.fail () para manejar una excepción lanzada desde una invocación de hub particular ( $.connection.hub.methodThatThrows().fail(function() { ... } ), pero obviamente esto no maneja las excepciones arrojado desde cualquier invocación.

SignalR v1.0.0 agregará soporte para IHubPipelineModules . Entonces podrá anular HubPipelineModule.BuildIncoming o HubPipelineModule.OnIncomingError que luego se puede agregar a HubPipeline través de GlobalHost.HubPipeline.AddModule(myHubPipelineModule) .

https://github.com/SignalR/SignalR/issues/548

https://github.com/SignalR/SignalR/commit/83fdbfd9baa1f1cc3399d7f210cb062597c8084c

Ejemplo de implementación:

using Microsoft.AspNet.SignalR.Hubs; public class MyHubPipelineModule : HubPipelineModule { protected override void OnIncomingError(ExceptionContext exceptionContext, IHubIncomingInvokerContext invokerContext) { dynamic caller = invokerContext.Hub.Clients.Caller; caller.ExceptionHandler(exceptionContext.Error.Message); } } protected void Application_Start() { GlobalHost.HubPipeline.AddModule(new MyHubPipelineModule()); } // JS // hub.client is also introduced in SignalR v1.0.0 $.connection.myHub.client.exceptionHandler = function (message) { alert(message); };

Esto es más de dos preguntas, pero:

  1. ¿Cuál es la mejor manera de tener un controlador de excepciones de nivel superior para mi Hub? No parece posible con la versión actual de SignalR

  2. ¿Por qué esto no hace nada en el cliente cuando lanzo un error en mi Hub?

    $ .connection.hub.error (function () {return alert ("test");});

Cuando depuro, puedo ver que mi método de error está conectado, pero cuando lanzo una excepción en el Hub, puedo ver que nunca se intenta llamar al método que configuré anteriormente. Lo único que pasa es SignalR barfs el error a la consola.

Para el registro, puedo conectar otros eventos muy bien

//Called during exceptions just fine $.connection.hub.received(function() { return alert("Received Data"); }); //Seems to do nothing? $.connection.hub.error(function() { return alert("Received Exception"); });