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。

推薦閱讀: