- - PR -
Webページが出力されない?
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-17 15:18
こんにちは、.NET FW1.1 でASP.NETのWebサイトを開発しております。
現在開発中のWebアプリケーションで不可解な現象に悩んでおります。 皆さんのお知恵を拝借できればと思い投稿しました。 よろしくお願いします。 (現象) A.aspx と B.aspx の2つのaspxがあります。 A.aspx を表示し、ページ内にあるButtonコントロールをクリックすると 内部で外部プロセスを起動し、終了後にB.aspxへ Response.Redirect する という処理が行なわれます。 このとき、AページからBページへ Response.Redirect しても ブラウザにB.aspxが表示されない。 (ここまでの調査結果) A.aspx、B.aspx で各イベントのタイミングでログ出力させてみると 以下の処理が行なわれています。(Page_Load以降のみ) ---(ログ内容ここから) A.aspx "2006/02/17 13:24:08 : Page_Load - START" "2006/02/17 13:24:08 : Page_Load - END" "2006/02/17 13:24:08 : btnXX_Click - START" "2006/02/17 13:24:21 : btnXX_Click - Method Call START" "2006/02/17 13:27:41 : btnXX_Click - Method Call END (result true)" "2006/02/17 13:27:41 : btnXX_Click - END (Redirect to B.aspx)" "2006/02/17 13:27:42 : btnXX_Click - catch ThreadAbortException ([mscorlib] スレッドを中止しようとしました。)" --- B.aspx "2006/02/17 13:27:41 : Page_Load - START" "2006/02/17 13:27:42 : Page_Load - END" "2006/02/17 13:27:42 : Page_PreRender - START" "2006/02/17 13:27:42 : Page_PreRender - END" "2006/02/17 13:27:42 : Page_Unload - START" "2006/02/17 13:27:42 : Page_Unload - END" ---(ログ内容ここまで) このログを見る限り、B.aspxは表示されるはずと 考えておりますが、ブラウザから見える状況は、 A.aspx のまま応答を待っているばかりです。 IEの下部にあるステータスバーには、Aページにあるボタンクリックの タイミングで表示された「http://xxx/A.aspx を開いています。」が ず〜っと表示されたままです。 ときどき「サーバが見つかりません。」と表示されることもあります。 (現象の切り分けはまだできていません。) どなたか、こんな現象をご存知ありませんか? すでにお手上げ状態です。 | ||||||||||||
|
投稿日時: 2006-02-17 15:36
ログによると B.aspx にリクエストはある、という結果なんですよね。
A.aspx のスレッド中止が 13:27:42 B.aspx の Page_Load が 13:27:41 というのが不可解なんですけども、おかしくないのかな。 ThreadAbortException を握り潰していないですよね? _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2006-02-17 15:46
返信ありがとうございます。
ソースコードでは、 Response.Redirect("B.aspx") しか記述していません。 ログを吐くようにするときに、念のためRedirect命令だけを Try〜Catchで括ってみました。(Re)Throwはしていません。 以下、該当箇所のソースコード(VB.NET)です。
| ||||||||||||
|
投稿日時: 2006-02-17 15:56
(Re)Throw をしてみて下さい。 _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2006-02-17 17:39
返信ありがとうございます。
Throwしてみました。現象は変わりませんでした。 前回 囚人さんから
というご指摘があったので、ログ出力をミリ秒単位にしてみました。 ---(ログ内容ここから) A.aspx "2006/02/17 17:22:40:5978 : Page_Load - START" "2006/02/17 17:22:40:7385 : Page_Load - END" "2006/02/17 17:22:43:9735 : Page_Load - START" "2006/02/17 17:22:43:9735 : Page_Load - END" "2006/02/17 17:22:43:9735 : btnXX_Click - START" "2006/02/17 17:22:43:9735 : btnXX_Click - Method Call START" "2006/02/17 17:26:28:9627 : btnXX_Click - Method Call END (result true)" "2006/02/17 17:26:33:5099 : btnXX_Click - END (Redirect to B.aspx)" "2006/02/17 17:26:33:5256 : btnXX_Click - Redirect catch ThreadAbortException ([mscorlib] スレッドを中止しようとしました。)" --- B.aspx "2006/02/17 17:26:33:5568 : Page_Load - START" "2006/02/17 17:26:35:1038 : Page_Load - END" "2006/02/17 17:26:35:1038 : Page_PreRender - START" "2006/02/17 17:26:35:1038 : Page_PreRender - END" "2006/02/17 17:26:35:1194 : Page_Unload - START" "2006/02/17 17:26:35:1194 : Page_Unload - END" ---(ログ内容ここまで) やはり前回は不可解だったようです。出力内容をミリ秒にしてから 何度か試しましたが、スレッド中止が Page_Load より遅い現象は 発生しませんでした。 また、そもそもdebug用にCatchしていたので、 Try〜Catch句を使用せず直接 Redirect しても現象は回避できませんでした。。 | ||||||||||||
|
投稿日時: 2006-02-17 21:14
ん〜なんでしょうね。
ログは、B.aspx にリクエストがあると書いてあるようですが、
は、ブラウザは A.aspx からレスポンスがない(か開いている最中。)と言っています。 もし、ログの言う状況になっていれば、「http://xxx/B.aspx を開いています。」じゃないのかなぁ。 A.aspx に問題があるのか B.aspx に問題があるのか…。 問題がありそうな箇所のソースを見せていただけるでしょうか。 _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2006-04-05 14:18
現象の原因がわかりましたのでここに記録しておきます。
この現象はA.aspx、B.aspxともに処理は正常動作していました。 サーバ側処理は問題ないということで、サーバとクライアントの 通信を監視してみたところ、約120秒でHTTPレスポンスが切断されていることが わかりました。 このタイマーイベントはIISに作成したサイトのプロパティで 「HTTPレスポンスタイムアウト」が初期値120秒に設定されて いたためと判明し、この値をたとえば600秒とすることで現象の 回避ができました。 根本解決ではありませんが、回避策のひとつとして有効と考えます。 レスいただいた皆様には大変感謝いたします。 今後ともよろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2006-04-05 21:33
ThreadAbortException は、例外の中でも特別で、握りつぶそうとしても勝手に再スローされます。
サーバの実行が行われれば、問題はないのでしょうか?クライアント側にも、タイムアウト値が存在していると思います。IE6 では待ってくれるものが、IE7b を入れている環境で待ってくれない事象が発生しています。 例えば、Web アプリケーションのデバッグのために処理を止めますが、IE6 では気長に待ってくれていたのに、IE7b では、勝手に「サーバからレスポンスがない」旨、メッセージ出力されます。 |