日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

WCF的異常處理_C#教程

作者:springsnow ? 更新時間: 2022-07-07 編程語言

介紹

WCF(Windows Communication Foundation) -異常處理:一般Exception的處理,F(xiàn)aultException和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; }
}

二、在操作協(xié)定中用[FaultContract]錯誤協(xié)定指定錯誤類型

[ServiceContract]
public interface IHello
{
    [OperationContract]
    [FaultContract(typeof(FaultMessage))]
    void HelloFaultExceptionGeneric();
}

三、在實現(xiàn)代碼中,定義一個方法,可以拋出一個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();
    }
}

原文鏈接:https://www.cnblogs.com/springsnow/p/9433949.html

欄目分類
最近更新