介绍
WCF(Windows Communication Foundation) -异常处理:一般Exception的处理,FaultException和FaultException<T>的抛出和处理,使用IErrorHandler处理异常。
下面介绍第三种异常:FaultException<T>的抛出和处理
一、强类型化一个SOP错误类,传递需要用[DataContract]
/// <summary> /// 错误信息实体类(用于错误契约FaultContract) /// </summary> [DataContract] public class FaultMessage { /// <summary> /// 错误信息 /// </summary> [DataMember] public string Message { get; set; } /// <summary> /// 错误代码 /// </summary> [DataMember] public int ErrorCode { get; set; } }
二、在操作协定中用[FaultContract]错误协定指定错误类型
[ServiceContract] public interface IHello { [OperationContract] [FaultContract(typeof(FaultMessage))] void HelloFaultExceptionGeneric(); }
三、在实现代码中,定义一个方法,可以抛出一个FaultException<FaultMessage>的异常
/// <summary> /// Hello类 /// </summary> public class Hello : IHello { /// <summary> /// 抛出FaultException<T>异常 /// </summary> public void HelloFaultExceptionGeneric() { throw new FaultException<FaultMessage>(new FaultMessage { Message = "抛出FaultException<T>异常", ErrorCode = -1 }, "为了测试FaultException<T>用的"); } }
四、在客户端中,可以捕获FaultException<FaultMessage>的异常。FaultMessage用Detail属性访问。
protected void btnHelloFaultExceptionGeneric_Click(object sender, EventArgs e) { ExceptionService.HelloClient proxy = new ExceptionService.HelloClient(); try { proxy.HelloFaultExceptionGeneric(); } catch (System.ServiceModel.FaultException<ExceptionService.FaultMessage> ex) { lblMsg.Text = string.Format("错误代码:{0};错误信息:{1};错误原因:{2}", ex.Detail.ErrorCode.ToString(), ex.Detail.Message, ex.Reason.ToString()); } finally { proxy.Close(); } }
到此这篇关于WCF异常处理的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。