Share via


在 XML Web Service 中處理和擲回例外狀況

本主題專門說明舊有技術。 應該使用下列建立 XML Web Service 及 XML Web Service 用戶端: Windows Communication Foundation.

使用 ASP.NET 所建立的 Web 服務方法擲回的例外狀況會以 SOAP 錯誤的形式傳回用戶端。SOAP 錯誤是在 SOAP 訊息中指出錯誤何時發生的 Fault XML 項目。其中可能包含像是例外狀況字串和例外狀況來源等的詳細資訊。如需 SOAP 錯誤的詳細資訊,請參閱 W3C 網站 (http://www.w3.org/TR/SOAP) 上的 SOAP 規格。

幸虧使用 ASP.NET 建立的用戶端和 Web 服務都不會直接填入或剖析 Fault XML 項目,而是使用 .NET Framework 中用來擲回和攔截例外狀況的通用設計模式。Web 服務可以擲回泛型 SoapException 或問題的特定例外狀況,例如 ArgumentOutOfRangeException。在這兩種方式下,ASP.NET 都會將例外狀況置入 SOAP Fault 項目中,使例外狀況序列化為有效的 SOAP 訊息。當 ASP.NET 用戶端還原序列化 SOAP 訊息時,會將 SOAP 錯誤轉換為 SoapException 例外狀況,並在 Message 屬性中放入例外狀況詳細資訊。用戶端因此可以設定 try/catch 區塊來攔截 SoapException。在<HOW TO:從使用 ASP.NET 建立的 Web 服務擲回例外狀況>中會提供 Web 服務擲回例外狀況的程式碼範例。在<HOW TO:處理 Web 服務方法擲回的例外狀況>中會提供 Web 服務用戶端攔截例外狀況的程式碼範例。

Web 應用程式可以由多個 Web 服務組成。不過,Global.asax 語法檔案中的 Application_Error 事件無法在全域例外處理 (Exception Handling) 中使用。Web 服務的 HttpHandler 會取用 Web 服務執行時發生的任何例外狀況,並在呼叫 Application_Error 事件之前將它轉換成 SOAP 錯誤。請建置 SOAP 擴充,以便在全域例外處理常式中處理 Web 服務例外狀況。SOAP 擴充可以檢查 ProcessMessage 方法中是否有例外狀況存在。在 ProcessMessage 方法中,您可以檢查當 Stage 屬性設定為 AfterSerialize 時所傳遞之 SoapMessageException 屬性。如需 SOAP 擴充的詳細資訊,請參閱使用 SOAP 擴充修改 SOAP 訊息

從使用 ASP.NET 建立的 Web 服務擲回例外狀況

將錯誤傳播回到用戶端,可以藉由擲回例外狀況的方式完成。Web 服務方法則可以透過下列方式達到這個目的:

  • 擲回 SoapException 例外狀況。

  • 擲回 SoapHeaderException 例外狀況。

  • 擲回問題的特定例外狀況。

  • 允許 ASP.NET 擲回例外狀況。

下表說明 Web 服務可以明確擲回的例外狀況,以及 ASP.NET 用戶端接收每個例外狀況的方式:

擲回的例外狀況類型 Web 服務可以執行的動作、用戶端接收到的例外狀況

SoapExceptionSoapHeaderException 以外的例外狀況

Web 服務方法會偵測是否發生例外狀況,然後擲回特定例外狀況,例如 ArgumentOutOfRangeException。.NET Framework 用戶端則接收 SoapException,並將詳細資訊序列化為 Message 屬性中的文字。

SoapException

Web 服務方法會偵測是否發生例外狀況,然後擲回 SoapException。同時還提供有關問題的其他詳細資訊。Web 服務方法會填入 Detail 屬性以提供這項其他資訊。.NET Framework 用戶端則接收含有其他資訊的 SoapException

SoapHeaderException

Web 服務方法會在處理 SOAP Header 項目時偵測是否發生例外狀況。Web 服務方法會擲回 SoapHeaderException,這將轉譯為 Fault 項目,而此項目則置入回應的 Header 項目中。根據 SOAP 規格,在這種情況下的錯誤必須出現於回應標頭中。.NET Framework 用戶端會收到 SoapHeaderException

您應該擲回問題的特定例外狀況,或是在 SoapExceptionSoapHeaderException 中提供額外的詳細資訊,如上表中所述。

XML Web Service 方法未處理的例外狀況

下表簡要說明當 Web 服務方法未攔截到方法內發生的例外狀況時,ASP.NET 會如何處理該例外狀況。

發生未處理的例外狀況時 ASP.NET 執行的動作

執行 Web 服務方法時

ASP.NET 攔截到例外狀況,再將它擲回到用戶端。使用 .NET Framework 所建立的 Web 服務用戶端會收到 SoapException,其中的例外狀況詳細資訊放在 Message 屬性中。

處理 SOAP 標頭時

ASP.NET 會擲回 SoapHeaderException。使用 .NET Framework 所建立的 Web 服務用戶端會收到 SoapHeaderException

另請參閱

工作

HOW TO:從使用 ASP.NET 建立的 Web 服務擲回例外狀況
HOW TO:處理 Web 服務方法擲回的例外狀況

參考

SoapException Class
SoapHeaderException Class

概念

建置 XML Web Service 用戶端

其他資源

Handling and Throwing Exceptions
使用 ASP.NET 的 XML Web Service