Ответ 1
$.connection.hub.error
используется для устранения сбоев соединения хабов. Вы можете использовать jQuery deferred.fail() для обработки исключения, вызванного определенным вызовом концентратора ($.connection.hub.methodThatThrows().fail(function() { ... }
), но это, очевидно, не обрабатывает исключения, вызванные любым вызовом.
SignalR v1.0.0 добавит поддержку IHubPipelineModules
. Затем вы сможете переопределить HubPipelineModule.BuildIncoming
или HubPipelineModule.OnIncomingError
, который затем можно добавить в HubPipeline
через GlobalHost.HubPipeline.AddModule(myHubPipelineModule)
.
https://github.com/SignalR/SignalR/issues/548
https://github.com/SignalR/SignalR/commit/83fdbfd9baa1f1cc3399d7f210cb062597c8084c
Пример реализации:
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);
};