@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Application_Errorでエラートラップ不審動作

1
投稿者投稿内容
さとくんパパ♪
常連さん
会議室デビュー日: 2004/05/07
投稿数: 29
投稿日時: 2004-05-25 16:56
質問事項:
こんにちは。Webアプリケーションの開発で上記の問題に直面しています。

【やろうとしている事】
アプリケーション上で発生する種々のエラーは、発生の可能性がある
箇所だけでトラップしていますが、それ以外のエラーは、当面Global.asax
内部のApplication_Erroでハンドリングしようとしています。

これにより、例えばDBサーバやアプリケーションサーバがダウンした
場合のエラートラップを一括して行おうとしています。

【問題点】
殆どの場合、Application_Errorは正しく動作するのですが、ときどき
ASP.NETのエラー画面(トレースログが出るやつ)が表示されます。
即ち、Application_Errorをすり抜けているようなのです。
しかも、その処理には一切再現性がありません。(再テストすると
ちゃんとカスタムエラー画面を表示する。ただし、数回やっていると
また何処かでASP.NETのエラー画面が出てしまう)

【聞きたい事】
このような症例を経験された方、またその回避方法をご存知の方いらっ
しゃいましたら、是非ご経験をお知らせください。
ASP.NETの障害ではないことを祈っています。

【付記事項】
因みにこのテストを行っているサーバは、以下のようになっています。

◇同一のASP.NETアプリケーションを3つの異なる仮想ディレクトリ上に
 インストールしている。

◇個々の仮想ディレクトリ上のアプリケーションに対して、複数の
 ユーザがアクセスしてテストを行う。

◇3つの仮想ディレクトリ上の同一アプリケーションにおいて、
 global.asaxのApplication_Errorを実装しているのは1つの仮想ディレ
 クトリのみであり、ここで集中してテストしている。

まさかこれが原因であるとは思いませんが・・・

以上、どんな些細な事でも結構です。情報をお寄せくださいませ。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-25 18:12
引用:

さとくんパパ♪さんの書き込み (2004-05-25 16:56) より:

◇同一のASP.NETアプリケーションを3つの異なる仮想ディレクトリ上に
 インストールしている。


 これって、どのように実装していますか?

wwwroot/
 |−/App1
 | |−global.asax
 |
 |−/App1のコピー
 |−/App1のコピー2

ディレクトリ構成は、こう?また、アプリケーションの構成は、どのようになっていますか?

 というのは、global.asaxは、アプリケーションドメインについて1つのはずで、3つのアプリケーションを1つのglobal.asaxで処理というのが、どうも理解できない。
さとくんパパ♪
常連さん
会議室デビュー日: 2004/05/07
投稿数: 29
投稿日時: 2004-05-26 10:47
Jittaさん、こんにちは、さとくんパパ♪です。
お世話になっています。

仮想ディレクトリの構成は、ほぼJittaさんの書いてくれた
通りです。ただしApp1, App2, App3と、それぞれちがう
アプリケーション名になっているのですが、コンテンツ
(アプリを構成する.aspxや.aspx.cs等のソースは全く同じ
という事です)
wwwroot/
 |−/App1
 | |−global.asax
 |
 |−/App2
 | |−global.asax
 |
 |−/App3
 | |−global.asax

「3つのアプリケーションは個々にGlobal.asaxを持っており
そのうち1つだけ(上の場合App1)に対してのみ、
Global.asaxのApplication_Errorでの総合エラーとラップを
実装し、他では何もやっていない」
という意味です。

分かりにくくて申し訳ございませんでした。
よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-26 12:20
引用:

さとくんパパ♪さんの書き込み (2004-05-26 10:47) より:

仮想ディレクトリの構成は、ほぼJittaさんの書いてくれた
通りです。ただしApp1, App2, App3と、それぞれちがう
アプリケーション名になっているのですが、コンテンツ
(アプリを構成する.aspxや.aspx.cs等のソース)は全く同じ
という事です
wwwroot/
 |−/App1
 | |−global.asax
 |
 |−/App2
 | |−global.asax
 |
 |−/App3
 | |−global.asax

「3つのアプリケーションは個々にGlobal.asaxを持っており
そのうち1つだけ(上の場合App1)に対してのみ、
Global.asaxのApplication_Errorでの総合エラーとラップを
実装し、他では何もやっていない」
という意味です。


 む〜?
 私の、ASP.NETに対する理解が正しければ、App1, App2, App3は別々のアプリケーションとして構成されており、それぞれがエラーをトラップすることが必要、、、なのですが。

 つまり、App1ではApplication_Errorでトラップできる(そう書いているから)のですが、App2, App3ではトラップできない(書いていないから)、と。再現性の面で、不思議???

 本当にApp2で発生した例外で、App1.Application_Errorに制御が移っていますか?
さとくんパパ♪
常連さん
会議室デビュー日: 2004/05/07
投稿数: 29
投稿日時: 2004-05-26 18:28
Jittaさん、こんにちは、さとくんパパ♪です。
お世話になっています。

書き方が悪くて申し訳ありません。
App1, App2, App3は、全てソースは同じですがGlobal.asaxが異なっており
App1のGlobal.asaxにのみ、Application_Errorにおいて、カスタムエラーペ
ージに分岐するロジックを実装しているということです。
App2, App3のGlobal.asaxのApplication_Errorでは、何もしていません。

従って・・・
App1 ==> エラー発生時にカスタムエラーページを表示
App2, App3 ==> エラー発生時に標準エラーページ(スタックとレースの
  出るやつ)を表示
となるはずなのですが、App1において、ときどき標準エラーページが
出てしまうことが問題となっております。

まったく不思議としか言いようがありません。
1

スキルアップ/キャリアアップ(JOB@IT)