【问题标题】:Using Castle for logging thrown exceptions in WCF (and otherwise)使用 Castle 记录 WCF 中抛出的异常(以及其他)
【发布时间】:2010-10-17 02:15:21
【问题描述】:

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

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

是否有更好的(WCF 或 Castle 的)机制来执行此操作?顺便说一句,我正在使用 log4net 进行日志记录。

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

提前致谢。

【问题讨论】:

    标签: c# wcf logging log4net castle


    【解决方案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

    【讨论】:

    • 好的,但是让我们概括一下这个问题:在非 WCF 环境中您将如何做到这一点?
    【解决方案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
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 2012-01-24
      • 1970-01-01
      • 2012-02-12
      • 2014-05-01
      相关资源
      最近更新 更多