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