web-dev-qa-db-ja.com

global.asax Application_ErrorメソッドがASMXサービスによってスローされた例外をキャッチしないのはなぜですか?

そしてそれを修正する方法。メンテナンスのために、スローされたすべての例外をログに記録したいと思います。

42
caustic

これは.Netの既知の問題です-Application_ErrorがWebサービスに対して発生することはありません。設計による理由があるかどうかはわかりませんが、機能しません。

ジェフ・アトウッドは、数年前にこれについて 投稿 (および フォローアップ )を持っていました。

  • 各Webサービスメソッドの周りにtry-catchブロックを配置します
  • ファサードデザインパターンを使用し、親オブジェクトにtry-catchを含めます
  • カスタムSOAP拡張機能またはHTTPModuleを作成する

大変な作業のように思えますが、私が気にかけているのは最初のものだけです。

42
Raelshark

より良い: HttpApplication.Errorイベント

注意:

WebアプリケーションにXMLWebサービスが含まれている場合、それらのサービスのグローバル例外処理にErrorイベントを使用することはできません。 XML WebサービスのHTTPハンドラーは、XML Webサービスで発生した例外をすべて消費し、エラーが呼び出される前にそれをSOAP障害に変換します。 XML Webサービスの例外を処理するには、カスタムグローバル例外ハンドラーでWebサービスの例外を処理するためのSOAP拡張機能を構築します。詳細については、 XML Webサービスでの例外の処理とスロー を参照してください。

16
John Saunders

このトピックに関するMicrosoftのWordをお探しの方は、こちらをご覧ください: " XML Webサービスでの例外の処理とスロー "。

これは関連するセクションです:

Webアプリケーションは複数のXMLWebサービスで構成できますが、Global.asaxファイル内のApplication_Errorイベントをグローバル例外処理に使用することはできません。 XML WebサービスのHttpHandlerは、XML Webサービスの実行中に発生した例外をすべて消費し、Application_Errorイベントが呼び出される前にそれをSOAP障害に変換します。

13
kbaribeau