XML Web サービスでの例外の処理およびスロー

このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.

ASP.NET を使用して作成した Web サービス メソッドによってスローされる例外は、SOAP 違反の形式でクライアントに送信されます。SOAP 違反とは、エラーが発生した状況を指定する SOAP メッセージ内の Fault XML 要素です。ここには、例外文字列および例外の発生元などの詳細情報が含まれます。SOAP 違反の詳細については、W3C Web サイト (http://www.w3.org/TR/SOAP) の SOAP 仕様を参照してください。

クライアントと、ASP.NET を使用して作成された Web サービスは共に、Fault XML 要素を直接指定または解析せずに、例外をスローおよびキャッチするための .NET Framework の共通デザイン パターンを使用します。Web サービスは、一般的な SoapExceptionArgumentOutOfRangeException などの、問題に固有の例外をスローできます。いずれの場合にも、ASP.NET は例外を SOAP Fault 要素に配置することによって、例外を有効な SOAP メッセージにシリアル化します。SOAP メッセージが ASP.NET クライアントで逆シリアル化されると、SOAP 違反は SoapException 例外に変換され、例外の詳細情報は Message プロパティに配置されます。これにより、クライアントでは、try/catch ブロックを設定して SoapException をキャッチできます。例外をスローする Web サービスのコード例については、「方法 : ASP.NET を使用して作成された Web サービスから例外をスローする」を参照してください。例外をキャッチする Web サービス クライアントのコード例については、「方法 : Web サービス メソッドによってスローされた例外を処理する」を参照してください。

Web アプリケーションは、複数の Web サービスから構成できます。ただし、Global.asax 構文ファイル内の Application_Error イベントをグローバル例外の処理に使用することはできません。Web サービスの HttpHandler は、Web サービスの実行中に発生した例外を処理し、Application_Error イベントが呼び出される前に、その例外を SOAP 違反に変換します。グローバル例外ハンドラーで Web サービスの例外を処理するには、SOAP 拡張機能を作成します。SOAP 拡張機能により、ProcessMessage メソッドを使用して例外の有無を確認できます。ProcessMessage メソッド内では、Stage プロパティが AfterSerialize に設定されるときに渡される SoapMessageException プロパティを確認します。SOAP 拡張機能の詳細については、「SOAP 拡張機能を使用した SOAP メッセージの変更」を参照してください。

ASP.NET を使用して作成された Web サービスからの例外のスロー

クライアントにエラーを伝えるには、例外をスローします。Web サービス メソッドは、次の方法で例外をスローします。

  • SoapException 例外をスローします。

  • SoapHeaderException 例外をスローします。

  • 問題に固有の例外をスローします。

  • ASP.NET に例外のスローを許可します。

次の表に、Web サービスで明示的にスローできる例外と、ASP.NET クライアントが各例外を受け取る方法を示します。

スローする例外の型 Web サービスの動作およびクライアントが受け取る内容

SoapException または SoapHeaderException 以外の例外

Web サービス メソッドが例外を検出し、ArgumentOutOfRangeException などの特定の例外をスローします。.NET Framework クライアントは、詳細情報が Message プロパティのテキストにシリアル化された SoapException を受け取ります。

SoapException

Web サービス メソッドが例外を検出し、SoapException をスローします。問題に関する追加の詳細情報も提供します。Web サービス メソッドは、Detail プロパティを指定して、この追加情報を提供します。.NET Framework クライアントは、追加情報が含まれる SoapException を受け取ります。

SoapHeaderException

Web サービス メソッドが、SOAP Header 要素の処理中に例外を検出します。Web サービス メソッドは、SoapHeaderException をスローします。これは、応答の Header 要素に配置される Fault 要素になります。この場合、違反は SOAP 仕様に従って応答ヘッダーに配置される必要があります。.NET Framework クライアントは、SoapHeaderException を受け取ります。

前の表に示すように、問題に固有の例外をスローするか、SoapException または SoapHeaderException に追加の詳細情報を提供する必要があります。

XML Web サービス メソッドで処理されない例外

Web サービス メソッドがメソッド内で発生した例外をキャッチしない場合に、その例外が ASP.NET で処理される方法について次の表で説明します。

処理されない例外が発生したタイミング ASP.NET の動作

Web サービス メソッドの実行中

ASP.NET が例外をキャッチし、クライアントにスローします。.NET Framework を使用して作成された Web サービス クライアントは、例外の詳細情報が Message プロパティに配置された SoapException を受け取ります。

SOAP ヘッダーの処理中

ASP.NET が SoapHeaderException をスローします。.NET Framework を使用して作成された Web サービス クライアントが SoapHeaderException を受け取ります。

参照

処理手順

方法 : ASP.NET を使用して作成された Web サービスから例外をスローする
方法 : Web サービス メソッドによってスローされた例外を処理する

リファレンス

SoapException Class
SoapHeaderException Class

概念

XML Web サービス クライアントの作成

その他のリソース

Handling and Throwing Exceptions
ASP.NET を使用した XML Web サービス