1

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

我在 .NET 中见过Castle、AOP 和 Logging,但它只涵盖方法的参数。

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

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

提前致谢。

4

2 回答 2

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
   }
}
于 2009-04-03T10:56:31.557 回答
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

于 2009-04-02T11:11:00.120 回答