Silverlight与WCF错误处理:Server Not Found(2)

     上一篇简单介绍了配置应用程序使客户端获取WCF抛出的SOAP异常,但是这些SOAP异常信息只包含InnerException ,Message,StackTrace,但是在实际情况中,我们

可能需要提供更详细的信息,在WCF中可以发送给客户端未声明的和声明的两种类型的SOAP错误,上一篇文章实际上是使用了未声明的SOAP错误。

     本篇在上一篇的基础上演示通过WCF提供的FaultContractAttribute声明服务操作中的错误:

     1.自定义一个用于错误契约的自定义类型

  [DataContract]
  public class DataAccessFault
  {
  [DataMember]
  public string ExceptionMessage { get; set; }
 
  [DataMember]
  public string ExceptionCode { get; set; }
  }

     2.修改服务操作的实现

  [OperationContract]
  [FaultContract(typeof(DataAccessFault))]
  public void DoWork()
  {
    throw new FaultException<DataAccessFault>(new DataAccessFault()
                                        {
                                            ExceptionMessage = "发生了异常",
                                            ExceptionCode = "CS2011"
                                        });
   }

   在操作中抛出该类型的异常,同时添加契约的类型

    3.客户端更新引用后,修改处理代码

  FaultException<DataAccessFault> faultException = e.Error as FaultException<DataAccessFault>;
                                                  MessageBox.Show(faultException.Detail.ExceptionCode + ":" +
                                                                  faultException.Detail.ExceptionMessage);

   最终的效果如下:image

 

   本篇通过错误契约向Silverlight客户端传递强类型的错误信息,在实际情况中还是根据需要进行取舍。

 

    代码下载:WcfExceptionLesson1.rar

posted @ 2011-05-24 10:51  ringgo  阅读(1792)  评论(0编辑  收藏  举报