Silverlight与WCF错误处理:Server Not Found(3)
前两篇主要介绍了WCF与客户端的错误传输,在实际的项目中,我们需要对服务契约中的每一个操作都进行try-catch捕捉异常,通常我们会将文件通过日志记录下来,
当操作很多的时候,对每一个方法都添加Log处理程序是很不方便的,在ASP.NET中可以将其写在Application_Error中,WCF则提供了IErrorHandler类实现。
IErrorHandler接口定义如下,主要提供了2个方法,具体见MSDN
namespace System.ServiceModel.Dispatcher
{
public interface IErrorHandler
{
void ProvideFault(Exception error, MessageVersion version, ref Message fault);
bool HandleError(Exception error);
}
}
实现 HandleError 方法可确保执行错误相关行为,包括错误日志记录、确保快速报告故障、关闭应用程序等。本篇在前面的基础上使用该接口实现日志处理
1.定义实现IErrorHandler的类
public class ErrorHandler : IErrorHandler
{
public bool HandleError(System.Exception error)
{
return true;
}
public void ProvideFault(System.Exception error, MessageVersion version, ref Message fault)
{
//Log處理
StreamWriter streamwriter = new StreamWriter(@"D:\log.txt");
streamwriter.Write(error.Message);
streamwriter.Close();
}
}
在ProvideFault中定义日志处理逻辑,本部分代码仅作演示。
2.在定义的SilverlightFaultEndpointBehavior的ApplyDispatchBehavior中添加该ErrorHandler
endpointDispatcher.ChannelDispatcher.ErrorHandlers.Add(new ErrorHandler());
经过简单的步骤,我们就实现了对WCF的日志全局处理,按照上面的代码逻辑,我们可以在D:\log.txt中看到记录的错误信息。
下一篇将讲述以代码的方式实现对WCF错误信息的配置。