【问题标题】:WCF Error Handler Exception LoggingWCF 错误处理程序异常日志记录
【发布时间】:2011-03-04 10:32:10
【问题描述】:

我在我的项目中使用IErrorHandler 来处理异常。

但是我怎样才能记录传入的方法参数异常。 我想获取日志记录的请求参数。

样品方法:

public Response GetData(Request request) {
    return new Response();
}

【问题讨论】:

    标签: c# wcf exception-handling


    【解决方案1】:

    你可以得到这样的请求消息:

    Message requestMessage = OperationContext.Current.RequestContext.RequestMessage;
    

    我通常做的是记录整个请求 XML。

    【讨论】:

      【解决方案2】:

      IErrorHandler 中没有此类信息 - 您只能在 ProvideFault 方法中解析原始消息。

      您可以尝试使用另一种方法 - 实现自定义 IOperationInvoker 并在 Invoke 方法中执行以下操作:

      // Just synchronous implementation - for asynchronous handle InvokeBegin and InvokeEnd
      public object Invoke(object instance, object[] inputs, out object[] outputs)
      {
        try
        {
          // Run common invoker - you will create new Invoker as decorator for existing one.
          return innerInvoker.Invoke(instance, inputs, outputs);
        }
        catch(Exception e)
        {
          // Handle error here
        }
      }
      

      操作调用者负责在服务中选择正确的操作并调用它。这只是一个想法 - 我还没有测试过。

      【讨论】:

        【解决方案3】:

        两种方式:

        1. 当设置为详细时,本机 WCF 记录器将捕获所有请求和响应,但是,这些文件往往会变得非常大、非常快。

        2. 使用log4net(搜索google下载)

          私有静态只读ILog log = LogManager.GetLogger(typeof(MyClass));

          public class MyClass
          

          { ...

          public Foo DoSomething(string arg)
          {
              try
              {
                 //do something
              }
              catch(Exception e)
              {
                 log.error(string.format("{0} Arguements: {1}", e.Tostring(), arg);
              }
          }
          

          }

        【讨论】:

        • 这里没有回答如何在实现IErrorHandler处理异常的类中记录请求。
        猜你喜欢
        • 2012-11-12
        • 2010-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        • 2020-10-01
        相关资源
        最近更新 更多