WCF的預期異常

此示例演示如何在使用類型化客戶端時捕獲預期異常。此示例基於實現計算器服務的入門示例。在此示例中,客戶端是一個控制檯應用程序 (.exe),服務是由 Internet 信息服務 (IIS) 承載的。

Aa354510.note(zh-cn,VS.100).gif注意:

本主題的末尾介紹了此示例的設置過程和生成說明。

此示例演示如何捕獲和處理正確的程序所必須處理的兩個預期異常類型:TimeoutExceptionCommunicationException

Windows Communication Foundation (WCF) 客戶端上從通信方法中引發的異常要麼是預期異常,要麼是意外異常。意外異常包括災難性故障(如 OutOfMemoryException)和編程錯誤(如 ArgumentNullExceptionInvalidOperationException)。通常沒有有效的方法來處理意外錯誤,所以通常不應在調用 WCF 客戶端通信方法時捕獲這些異常。

在 WCF 客戶端上從通信方法中引發的預期異常包括 TimeoutExceptionCommunicationException 以及 CommunicationException 的任何派生類。這些異常表明通信過程中出現問題,該問題可以通過中止 WCF 客戶端並報告通信故障而得到安全的處理。因爲外部因素可能導致任何應用程序中出現這些錯誤,所以正確的應用程序必須捕獲這些異常並在發生異常時進行恢復。

客戶端可以引發 CommunicationException 的幾個派生類。在某些情況下,應用程序也會捕獲其中的某些類以執行特殊的處理,而讓其他類作爲 CommunicationException 進行處理。這可以通過先捕獲比較具體的異常類型,然後在稍後的 catch 子句中捕獲 CommunicationException 來完成。

調用客戶端通信方法的代碼必須捕獲 TimeoutExceptionCommunicationException。處理此類錯誤的一種方法是中止客戶端並報告通信故障。

try
{
    ...
    double result = client.Add(value1, value2);
    ...
    client.Close();
}
catch (TimeoutException exception)
{
    Console.WriteLine("Got {0}", exception.GetType());
    client.Abort();
}
catch (CommunicationException exception)
{
    Console.WriteLine("Got {0}", exception.GetType());
    client.Abort();
}

如果發生預期異常,客戶端或許可以繼續使用,或許無法繼續使用。若要確定客戶端是否仍然可以使用,請檢查 State 屬性是否爲 CommunicationState.Opened。如果此屬性仍然處於打開狀態,則客戶端仍然可以使用。否則,則應中止客戶端並釋放對其的所有引用。

Aa354510.Caution(zh-cn,VS.100).gif警告:

您可能注意到具有會話的客戶端在出現異常後常常不能再使用,而沒有會話的客戶端在出現異常後常常可以繼續使用。但是,這些情況都是不能保證的,因此如果您希望在出現異常後繼續使用客戶端,您的應用程序應檢查 State 屬性以驗證客戶端是否仍然處於打開狀態。

運行示例時,在客戶端控制檯窗口中顯示操作響應和異常。

客戶端進程運行兩個方案,每個方案都嘗試先調用 Add,再調用 Divide。第一個方案通過在調用 Divide 之前中止客戶端來模擬網絡問題。第二個方案通過將超時設置爲太短的時間而使方法無法完成,從而導致超時情況的發生。客戶端進程的預期輸出爲:

Add(100,15.99) = 115.99
Simulated network problem occurs...
Got System.ServiceModel.CommunicationObjectAbortedException
Add(100,15.99) = 115.99
Set timeout too short for method to complete...
Got System.TimeoutException

設置、生成和運行示例

  1. 請確保已經執行了 Windows Communication Foundation 示例的一次性安裝過程

  2. 若要生成 C# 或 Visual Basic .NET 版本的解決方案,請按照生成 Windows Communication Foundation 示例中的說明進行操作。

  3. 若要用單機配置或跨計算機配置來運行示例,請按照Running the Windows Communication Foundation Samples中的說明進行操作。

Aa354510.Important(zh-cn,VS.100).gif 注意:
您的計算機上可能已安裝這些示例。在繼續操作之前,請先檢查以下(默認)目錄:

<安裝驅動器>:\WF_WCF_Samples

如果此目錄不存在,請訪問針對 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能爲英文網頁),下載所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位於以下目錄。

<安裝驅動器>:\WF_WCF_Samples\WCF\Basic\Client\ExpectedExceptions

 

轉自:http://msdn.microsoft.com/zh-cn/library/aa354510(v=vs.100).aspx

 

發佈了19 篇原創文章 · 獲贊 0 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章