我刚开始使用ELMAH并且是粉丝.我的团队支持大量的Web应用程序,我特别兴奋的是ELMAH允许我们将每个应用程序的异常保存到同一个MS SQL数据库表中.
我们还支持一些控制台,DLL和桌面应用程序.是否可以使用ELMAH DLL将这些应用程序中的异常记录到同一位置?
我们使用优秀的ELMAH来处理ASP.NET 3.5 Web应用程序中的未处理异常.除了使用REST功能使用的WCF服务之外,这对于所有站点都非常有效.当应用程序代码未处理的操作方法中发生异常时,WCF会以各种方式处理它,具体取决于服务协定和配置设置.这意味着该异常不会最终触发ELMAH使用的ASP.NET HttpApplication.Error事件.我知道要处理的两个解决方案是:
第一个选项非常简单,但并不完全是DRY.第二个选项仅要求您在实现属性和ErrorHandler后使用自定义属性装饰每个服务.我是根据Will的工作完成的,但我想在发布代码之前验证这是正确的方法.
有没有更好的方法让我错过了?
在MSDN documenation为IErrorHandler说,的HandleError方法是做记录的地方,但ELMAH访问HttpContext.Current.ApplicationInstance,即使HttpContext.Current可用,在此方法中为null.在ProvideFault方法中调用Elmah是一种解决方法,因为ApplicationInstance已设置,但这与API文档中描述的意图不匹配.我在这里错过了什么吗?文档确实声明您不应该依赖于在操作线程上调用的HandleError方法,这可能是ApplicationInstance在此范围内为空的原因.