2009-01-21 107 views
2

我正在從基於C#表單的應用程序調用Web服務。SoapHttpClientProtocol.Invoke方法的異常.NET web服務

ServReturnType obj = ServProxyClass(int i, int k); 

我有可能找回異常。例外情況可能是服務根本沒有連接,接收失敗,但是原始消息已經發送,或者兩者之間有任何內容。然後,我需要根據所拋出的異常做出決定,無論是在類型還是在消息中,或者兩者兼而有之,以便接下來執行兩個操作之一。

try 
{  
    ServReturnType obj = ServProxyClass(int i, int k); 
} 
catch (WebException ex) 
{ 
    DoAction1(); 
} 
catch(SocketException ex) 
{ 
    DoAction2(); 
} 
catch(SoapException ex) 
{ 
    DoAction1() 
} 

問題是,我選擇的後續操作取決於第一次調用是否在發生故障前將其發送到服務器。我如何找到所有可能的異常列表,以及它們可能的含義,因爲這是框架中的所有代碼。我查看了MSDN文檔,並看到SoapHttpClientProtocol.Invoke可以拋出SoapException,但是有這種方法調用的方法可能會導致System.Net.WebExceptions無效。所以我需要一個整個調用堆棧的列表以及它可以拋出什麼,以及這意味着什麼。

任何想法?

更新1

達林,你的回答或多或少的證實了我的懷疑,我想沒有什麼意義。我選擇先做更多的偵探工作,然後用它來決定下一步該做什麼。不幸的是,在這種情況下,由於我們正在處理信用卡,所以確實發生了什麼事情,以及我們是否發送了數據。

回答

3

可以從Web服務調用拋出的異常的完整列表非常廣泛,我真的不認爲測試每種可能的異常都是一個好主意。在許多情況下,這將是足以抓住了的SoapException其中可能包含通過發送一些企業錯誤​​SOAP Fault Element和所有其他異常可能會被視爲非處理錯誤:

try 
{  
    ServReturnType obj = ServProxyClass(int i, int k); 
} 
catch(SoapException ex) 
{ 
    //Serialize and analyze the fault message from the exception to obtain more info. 
    DoSomethingWithTheInfo(); 
} 
catch(Exception ex) 
{ 
    LogTheExceptionSoThatLaterYouKnowWhatHappened(ex); 
    SayToTheUserThatSomethingTerriblyWrongHappened(); 
} 

這裏是一個不錯的article解釋如何提高和處理SoapExceptions。