使用Castle记录WCF中的抛出异常(以及其他方式)

时间:2009-04-02 11:05:45

标签: c# wcf logging log4net castle

我正在编写一个WCF Web服务,我想知道是否有一种优雅的(面向方面​​的)方法来使用Castle拦截器机制来记录我的Web方法抛出的异常?我知道IInterceptor接口,但我找不到任何异常信息。

我见过Castle, AOP and Logging in .NET,但它只涵盖了方法的参数。

这样做有更好的(WCF或城堡)机制吗?顺便说一句,我正在使用log4net进行日志记录。

更新:我了解WCF的日志记录工具,但我正在寻找更多通用解决方案,而不仅仅是在WCF环境中。

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果你想一般使用Castle Interceptors,你可以这样做:

public void Intercept(IInvocation invocation)
{
   //do some preprocessing here if needed
   try
   {
      invocation.Proceed()
   }
   catch(Exception e)
   {
      LogException(e);
      throw;
   }
   finally
   {
      //do some postprocessing jf needed
   }
}

答案 1 :(得分:1)

您应该在WCF跟踪和日志记录中使用构建。然后,您可以使用WCF跟踪查看器,它将来自服务和客户端的日志拼凑在一起,以便您可以看到完整的消息流。

http://www.devx.com/dotnet/Article/37389/0/page/6

WCF中有IErrorHandler接口:

public interface IErrorHandler
{
    bool HandleError(Exception error, MessageFault fault);
    void ProvideFault(Exception error, ref MessageFault fault, ref string faultAction);
}

此处有更多详情:http://www.extremeexperts.com/Net/Articles/ExceptionHandlingInWCF.aspx