我需要在signalR集线器上实现自定义错误日志记录。这可以通过创建将继承自HubPipelineModule的ErrorModule来完成,它将在Startup上注册,如下所示
GlobalHost.HubPipeline.AddModule(new ErrorModule());
这是我的中心
public class FooHub : Hub
{
public void MethodWithException()
{
throw new Exception();
}
public void FooMethod()
{
}
}
这是我的模块
public class ErrorModule : HubPipelineModule
{
protected override void OnIncomingError(ExceptionContext exceptionContext, IHubIncomingInvokerContext invokerContext)
{
//call foo method on foo hub
//log error
}
}
假设调用了MethodWithException()。可以在调用事件OnIncomingError?
的集线器上调用FooMethod()答案 0 :(得分:1)
有这样的事情:
protected override void OnIncomingError(ExceptionContext exceptionContext,
IHubIncomingInvokerContext invokerContext)
{
dynamic caller = invokerContext.Hub.Clients.Caller;
caller.ExceptionHandler(exceptionContext.Error.Message);
//log something here
Debug.WriteLine(exceptionContext.Error.Message);
}
修改强>
要调用集线器的特定方法,您可以执行以下操作:
protected override void OnIncomingError(ExceptionContext exceptionContext,
IHubIncomingInvokerContext invokerContext)
{
var hub = (invokerContext.Hub as HubType); //
hub.MyMethod("myparam","mysecondparam");
//log something here
Debug.WriteLine(exceptionContext.Error.Message);
}
您可以在此处找到完整代码:How to handle SignalR server exception at client?