簡體   English   中英

捕獲SOAP錯誤並處理異常

[英]Capturing SOAP faults and handling exceptions

我正在使用Web服務。 一些方法在我調用時拋出異常,因為參數是無效的值,例如。 我想處理異常,但它不包含任何數據信息,只包含消息“Bad Request”。 這是我的http響應: 在此輸入圖像描述

        try
        {
            var data = client.SomeMethod(4);
        }
        catch (Exception exception)
        {
            // exception.Message = Bad Request
            // exception don't contains any more data information
        }   

我如何捕獲其他信息

當http狀態代碼為2xx或5xx而非4xx時,您可以使用FaultException捕獲異常。 您可以使用System.ServiceModel.ProtocolException捕獲http狀態代碼4xx,然后從InnerException獲取流並解析它或從此流中獲取FaultException。 有關詳細信息,請參閱http://blogs.msdn.com/b/nathana/archive/2011/03/31/deciphering-a-soap-fault-with-a-400-status-code.aspx

我假設這是一個WCF Web服務? 你正在接受廣泛的例外。 嘗試使用FaultException<TDetail>

典型的已部署服務使用FaultContractAttribute正式指定客戶端可以在正常操作過程中接收的所有SOAP錯誤。 FaultContractAttribute中的錯誤信息在到達客戶端應用程序時顯示為FaultException(其中typeparameter是操作的FaultContractAttribute中指定的可序列化錯誤對象)。 FaultContractAttribute可用於為雙向服務方法和異步方法對指定SOAP錯誤。

因為FaultException既是FaultException又是CommunicationException,要捕獲指定的SOAP錯誤,請確保在FaultException和CommunicationException類型之前捕獲FaultException類型,或者在其中一個異常處理程序中處理指定的異常。

您可以使用如下所示的try-catch。 然后您可以訪問其他信息。 你必須找到“TDetail”。 它由Web服務提供。

catch(FaultException<TDetail> ex)
{
    ex.Code.ToString();
    ex.Reason.ToString();
}

另一種方式。

FaultException faultException = (FaultException)ex;
MessageFault msgFault = faultException.CreateMessageFault();
XmlElement elm = msgFault.GetDetail<XmlElement>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM