Signalr 如何使用信号器配置ELMAH

Signalr 如何使用信号器配置ELMAH,signalr,elmah,Signalr,Elmah,我在MVC4应用程序中使用信号集线器。 我添加了ELMAH来处理所有错误。 问题是集线器中发生的错误没有记录在ELMAH axd中。 有没有办法对其进行配置?您必须添加一个HubPipelineModule,并确保在errorLog元素中设置了一个ApplicationName,否则Elmah将无法记录错误,因为它没有HttpContext或AppName来记录 <errorLog type="Elmah.SqlErrorLog, Elmah" applicationName="MyApp

我在MVC4应用程序中使用信号集线器。 我添加了ELMAH来处理所有错误。 问题是集线器中发生的错误没有记录在ELMAH axd中。
有没有办法对其进行配置?

您必须添加一个
HubPipelineModule
,并确保在errorLog元素中设置了一个ApplicationName,否则Elmah将无法记录错误,因为它没有HttpContext或AppName来记录

<errorLog type="Elmah.SqlErrorLog, Elmah" applicationName="MyAppName" connectionStringName="myConnString" />
确保将模块添加到集线器管道:

GlobalHost.HubPipeline.AddModule(new ElmahPipelineModule()); 
编辑

信号员2+

我注意到在我最近从事的一个项目中没有记录我的信号器异常,并且发现在尝试从当前上下文获取ErrorSignal时抛出ArgumentNullException。以下方法正确处理此异常,以便再次记录信号器错误

private static bool RaiseErrorSignal(Exception e)
{
    var context = HttpContext.Current;
    if (context == null)
        return false;

    try
    {
        var signal = ErrorSignal.FromCurrentContext();
        if (signal == null)
            return false;
        signal.Raise(e, context);
        return true;
    }
    catch (ArgumentNullException)
    {
        return false;
    }
}

对于其他陷入最后一步的人,将最后一行添加到RegisterHubs类中。例如:
publicstaticvoidstart(){RouteTable.Routes.MapHubs();GlobalHost.hubpipline.AddModule(newshopperscape.Web.API.ElmahPipelineModule());}
谢谢。GlobalHost是.NET 4中的新功能,我不知道。对于使用Autofac的用户,这将有助于HubPipeline模块:。此外,在较新的Elmah上,
OnIncomingError
的覆盖会得到一个
ExceptionContext
。要获取异常,请使用
exceptionContext.Error
private static bool RaiseErrorSignal(Exception e)
{
    var context = HttpContext.Current;
    if (context == null)
        return false;

    try
    {
        var signal = ErrorSignal.FromCurrentContext();
        if (signal == null)
            return false;
        signal.Raise(e, context);
        return true;
    }
    catch (ArgumentNullException)
    {
        return false;
    }
}