Bri*_*lia 18 javascript signalr signalr-hub
这是两个问题,但是:
为我的Hub设置顶级异常处理程序的最佳方法是什么?目前版本的SignalR似乎不可能
当我在Hub中抛出错误时,为什么这在客户端上实际上没有做任何事情?
$ .connection.hub.error(function(){return alert("test");});
当我调试时,我可以看到我的错误方法被连线,但是当我在Hub上抛出异常时,我可以看到从来没有尝试调用我在上面设置的方法.唯一发生的事情是SignalR将错误发送到控制台.
为了记录,我可以很好地连接其他事件
//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");
});
Run Code Online (Sandbox Code Playgroud)
hal*_*r73 31
$.connection.hub.error用于处理集线器连接故障.您可以使用jQuery的deferred.fail()来处理从特定集线器调用($.connection.hub.methodThatThrows().fail(function() { ... })抛出的异常,但这显然不会处理从任何调用抛出的异常.
SignalR v1.0.0将添加支持IHubPipelineModules.然后您将能够覆盖HubPipelineModule.BuildIncoming或者HubPipelineModule.OnIncomingError可以将其添加到HubPipelinevia中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);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6365 次 |
| 最近记录: |