从HubPipelineModule OnIncomingError事件调用集线器上的方法

时间:2016-03-23 16:19:54

标签: asp.net signalr

我需要在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()

1 个答案:

答案 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?