【发布时间】:2011-03-04 10:32:10
【问题描述】:
我在我的项目中使用IErrorHandler 来处理异常。
但是我怎样才能记录传入的方法参数异常。 我想获取日志记录的请求参数。
样品方法:
public Response GetData(Request request) {
return new Response();
}
【问题讨论】:
标签: c# wcf exception-handling
我在我的项目中使用IErrorHandler 来处理异常。
但是我怎样才能记录传入的方法参数异常。 我想获取日志记录的请求参数。
样品方法:
public Response GetData(Request request) {
return new Response();
}
【问题讨论】:
标签: c# wcf exception-handling
你可以得到这样的请求消息:
Message requestMessage = OperationContext.Current.RequestContext.RequestMessage;
我通常做的是记录整个请求 XML。
【讨论】:
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
}
}
操作调用者负责在服务中选择正确的操作并调用它。这只是一个想法 - 我还没有测试过。
【讨论】:
两种方式:
当设置为详细时,本机 WCF 记录器将捕获所有请求和响应,但是,这些文件往往会变得非常大、非常快。
使用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);
}
}
}
【讨论】: