相关疑难解决方法(0)

使用ELMAH的WCF服务的异常日志记录

我们使用优秀的ELMAH来处理ASP.NET 3.5 Web应用程序中的未处理异常.除了使用REST功能使用的WCF服务之外,这对于所有站点都非常有效.当应用程序代码未处理的操作方法中发生异常时,WCF会以各种方式处理它,具体取决于服务协定和配置设置.这意味着该异常不会最终触发ELMAH使用的ASP.NET HttpApplication.Error事件.我知道要处理的两个解决方案是:

  • 在try {} catch中包含所有方法调用(Exception ex){Elmah.ErrorSignal.FromCurrentContext().Raise(ex); 扔; 在catch块中显式调用Elmah.
  • 使用IErrorHandler,如Will Hughes的博客文章中所述,使WCF和ELMAH一起发挥出色,将对ELMAH的调用分解为单独的ErrorHandler.

第一个选项非常简单,但并不完全是DRY.第二个选项仅要求您在实现属性和ErrorHandler后使用自定义属性装饰每个服务.我是根据Will的工作完成的,但我想在发布代码之前验证这是正确的方法.

有没有更好的方法让我错过了?

在MSDN documenation为IErrorHandler说,的HandleError方法是做记录的地方,但ELMAH访问HttpContext.Current.ApplicationInstance,即使HttpContext.Current可用,在此方法中为null.在ProvideFault方法中调用Elmah是一种解决方法,因为ApplicationInstance已设置,但这与API文档中描述的意图不匹配.我在这里错过了什么吗?文档确实声明您不应该依赖于在操作线程上调用的HandleError方法,这可能是ApplicationInstance在此范围内为空的原因.

asp.net wcf logging elmah exception

62
推荐指数
2
解决办法
2万
查看次数

捕获通信异常而不是自定义故障异常 - WCF

在服务器上,我正在抛出这样的异常.

catch(SqlException exception)
{
  if (exception.Message.Contains("Custom error from stored proc"))
  {
    //Exception to be thrown when authentication fails.
    throw new FaultException<MyServiceFault>(new MyServiceFault { MessageText = exception.Message });
  }
}
Run Code Online (Sandbox Code Playgroud)

在客户端,我正在捕捉异常

catch(FaultException<MyServiceFault> faultException)
{

}
Run Code Online (Sandbox Code Playgroud)

这是我的MyServiceFault

[DataContract]
public class MyServiceFault  
{
  [DataMember]
  public string MessageText { get; set; }

  [DataMember]
  public Guid Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

问题是在客户端上,它不会转到MyServiceFault catch块而是转到通信异常catch块并抛出此错误

System.ServiceModel.CommunicationException: The underlying connection was closed: The connection was closed unexpectedly. ---> System.Net.WebException
Run Code Online (Sandbox Code Playgroud)

我还在我的服务[FaultContract(typeof(MyServiceFault))]实现的界面中修改了我的服务方法.

在我的web.config servicebehaviour标签组成 <serviceDebug includeExceptionDetailInFaults="true" /> …

wcf exception-handling

1
推荐指数
1
解决办法
5711
查看次数

标签 统计

wcf ×2

asp.net ×1

elmah ×1

exception ×1

exception-handling ×1

logging ×1