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 サービスは、一般的な SoapException、ArgumentOutOfRangeException などの、問題に固有の例外をスローできます。いずれの場合にも、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 に設定されるときに渡される SoapMessage の Exception プロパティを確認します。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