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错误信息的配置。

    

 

     代码下载:WcfExceptionLesson2.rar

posted @ 2011-05-24 15:29  ringgo  阅读(1080)  评论(5编辑  收藏  举报