WCF的異常處理
更新時間:2022年05月12日 14:38:20 作者:springsnow
這篇文章介紹了WCF處理異常的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
介紹
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();
}
}到此這篇關于WCF異常處理的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

