- PR -

タイムアウト時にIEが再リクエスト?

1
投稿者投稿内容
xya
会議室デビュー日: 2005/08/18
投稿数: 10
投稿日時: 2007-07-18 18:32
いつも大変お世話になっております.

さっそくですが,不可思議な現象が発生して困っております.

まず環境は以下の通りです.
サーバー:Windows2003Server & IIS 6.0
クライアント:Windows XP Professional sp2 & Internet Explorer 6.0 sp2
開発環境:VisualStudio2003 & .NetFrameWork1.1


IISの接続のタイムアウトを120秒(デフォルト値)に設定し,サーバー上で2分以上かかる処理を記述します.
(threadのsleepメソッドで3分ほど処理をとめてあげる等です.)
この2分以上かかる処理に対して,イベントドリブンを利用せず,JavaScriptを使用してPostリクエストを送信すると,
1回目のアクセスは,2分程度経過するとタイムアウト(「ページが表示できません」)となります.

ここでブラウザを閉じて再度JavaScriptを使用してPostリクエストを送信すると,
1回サーバーから切断された直後,再度IEが(?)Postリクエストを送信し,タイムアウトになるまでに4分以上の時間がかかることがあります.


例:
・a.aspxとa.aspx.vbを用意します.(a.aspx.vbはa.aspxのコードビハインドの関係とします)

・a.aspx.vbのPage_Loadを以下のように記述します
-------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If IsPostBack() Then
'3分間の停止
System.Threading.Thread.Sleep(1000 * 60 * 3)
End If
End Sub
-------------

・a.aspxのHeadとBodyにJavaScriptとFormを用意します.
----------JavaScript----------
<script type="text/javascript">
function test1()
{
Form1.action = "a.aspx";
Form1.method = "post";
Form1.target = "_self";
Form1.submit();
}
</script>
------------------------------
----------BodyHtml----------
<form id="Form1" method="post" runat="server">
<input type="button" name="test" value="submit" onclick="javascript:test1()">
</form>
----------------------------

・Webセットアップ作成後,Windows 2003 server上にWebアプリケーションとしてインストールします.

・IEよりWindows 2003 Server上のa.aspxにアクセスし,submitボタンをクリックします.
→2分くらい後に「ページが表示できません」

・IEを一度閉じ,もう一度起動後に再度a.aspxにアクセスし,submitボタンをクリックします.
→4分くらい後に「ページが表示できません」
→このリクエスト状態を横取り丸(http://hide.maruo.co.jp/software/ydm.html)+inetspy(http://hide.maruo.co.jp/software/inetspy.html)で見てみると,サーバーから切断された直後,再度リクエストが送信されています.


サーバーからの切断直後になぜ再リクエストが送信されるか,ご存知の方はいらっしゃいませんでしょうか?

長文ですが,よろしくお願いいたします.
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-07-18 19:04
条件をもう少し絞っていただけますか。

OS再起動直後のみ、1回リクエストなのでしょうか。
他のページへのリクエストをはさむと複数回リクエストをしないのでしょうか。
submitボタンのイベントをいじらなければ現象は発生しないのでしょうか。
_________________
xya
会議室デビュー日: 2005/08/18
投稿数: 10
投稿日時: 2007-07-19 13:22
大変遅くなりましたが,返答いたします.

>OS再起動直後のみ、1回リクエストなのでしょうか。
サーバーもクライアントもOSは起動しっぱなしであったため再起動は関係ないと思います.
WEBアプリケーションを再インストールした直後にアクセスしたときのみ1回リクエストになるようです.

>他のページへのリクエストをはさむと複数回リクエストをしないのでしょうか。
問題のあるページへの直接アクセスではなく,メニュー等から順にアクセスした場合でしょうか?
もしそうでしたら,この場合も複数回リクエストを送信していることを確認しています.

>submitボタンのイベントをいじらなければ現象は発生しないのでしょうか。
.netのイベントドリブン形式の場合は複数回リクエスト送信をしないことは確認しています.

2回送信されるうち,1回目と2回目のHTTPヘッダーは完全に一致しているようです.(横取り丸の結果で調べた結果)
2回送信された後,ブラウザの戻るを利用して戻り,再度リクエストした場合は1回しか送信されないようです.しかし,ブラウザのキャッシュを削除するとまた2回送信されるようになるようです.
キャッシュにかかわる処理が関係しているのでしょうか?

引き続き,よろしくお願いいたします.
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-07-19 19:54
onclick="javascript:test1()"
を、
onclick="javascript:test1();return false;"
にすると、どうなりますか?
xya
会議室デビュー日: 2005/08/18
投稿数: 10
投稿日時: 2007-07-19 23:18
ご返事ありがとうございます.

return false;
を追加してみましたが,相変わらず再リクエストが送信されるようです.

送受信されているパケットの内容を覗いてみましたが,約30秒ごとにブラウザ(?)からサーバーに何かパケットが送信されているようです.
切断時にサーバー側からは何もパケットが送信されていないようで,切断された直後突然再度リクエストが送信されているようです.

調査できる範囲で調査していますが,いまだに原因がつかめません.
xya
会議室デビュー日: 2005/08/18
投稿数: 10
投稿日時: 2007-07-23 17:22
お世話になっています.

少しだけ進展(?)がありましたので報告します.

どうも,タイムアウトになるのは2003Server(無印)だけのようです.
2003ServerSP1の環境があったのでそちらで試してみましたがタイムアウトにはならず3分間待ち続けました.
現象が再現する2003Server(無印)をためしにSP1にアップデートしたところ,タイムアウトにならず,現象が再現しなくなりました.
SP1で修正された何かが影響しているようです.
最初の質問とは少し方向がずれてしまいますが,どのような修正が影響したのかご存知の方はいらっしゃいませんでしょうか?

また,一つ申し上げ忘れておりましたが,a.aspxをおいているウェブアプリケーションのweb.configのcompilationタグのdebug要素はtrueを指定しています.
別の記事(http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17655&forum=7)で2000Serverでdebugがtrueのときはタイムアウトが起こらないと書かれていましたが,今回タイムアウトが発生していたので関係ないものと判断し,記述しておりませんでした.

引き続きよろしくお願いいたします.
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-07-23 18:33
タイムアウトが起こらない、じゃなくて、executionTimeoutの値を無視する、ですね。
1

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