WCF的異常處理
介紹
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異常處理的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持LevelAH。