C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: プロキシ経由のタイムアウト回避について


(過去ログ 18 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■7326 / inTopicNo.1)  プロキシ経由のタイムアウト回避について
  
□投稿者/ やま (1回)-(2007/09/03(Mon) 22:28:07)

分類:[ASP.NET (VB)] 

プロキシ経由でサーバーで長時間処理を動かすと、プロキシがタイムアウトをさせてしまう事象が発生しています。

クライアントからサーバーへ処理が移ったあと、一旦サーバーはdivタグで「処理中です。」の文言を画面全部埋めて
返します。
こちらの処理中画面を処理の間、定期的にリロードさせてタイムアウト回避を図ろうとしているのですが、
フレームで分けてなく、divで埋めているだけですので、
metaタグにreloadを埋め込むと、元の画面も定期的にリロードしてしまう事態になっています。

divタグで区切った範囲だけ、リロードさせる等の技がありましたら何方か御教示頂けないでしょうか。

よろしくお願いします。

引用返信 編集キー/
■7339 / inTopicNo.2)  Re[1]: プロキシ経由のタイムアウト回避について
□投稿者/ Moo (84回)-(2007/09/04(Tue) 09:51:09)
Moo さんの Web サイト
1点だけ

>divタグで区切った範囲だけ、リロードさせる等の技
AJAXでしょうか。
引用返信 編集キー/
■7353 / inTopicNo.3)  Re[1]: プロキシ経由のタイムアウト回避について
□投稿者/ mあ (55回)-(2007/09/04(Tue) 13:59:37)
No7326 (やま さん) に返信
> divタグで区切った範囲だけ、リロードさせる等の技がありましたら何方か御教示頂けないでしょうか。
>


スクリプト使わないと出来ないかな。

<body>
<div style="font-size:500px">処理中</div>
<iframe id=Frame1 name=Frame1 width=0 height=0></iframe>
<script>
function window.onload() {
var f = document.getElementById("Frame1");
if (document.all) f.onload = function(e) {
if (e.readyState == 200) {
reloadWindow(f)
}
}
else {
f.onreadystatechange = function(e) {
if (e.readyState == 200) {
reloadWindow(f)
}
}
}
post();
}

function post() {
var timeoutTime = parseInt(document.forms[0].porlingTime.value);
setTimeout(function() {
document.forms[0].submit();
}, timeoutTime); //「処理中」表示から N秒後 status.aspx へポストする
}

//status.aspx が返す Json フォーマットの文字列 "{" から "}" までを文字列で返します。
var jsonFormat = {
reloadURL : "/xxxx.aspx", /* 成功・失敗した時の 新しいとび先URL */
statusCode: "最中", /* 成功・失敗・最中 */
value: 0 /* 画面に進捗率を示す必要あれば、ここに 例えば 70 とか */
};

function reloadWindow(f) {
var json = eval(f.document.body.innerText);

switch (json.statusCode) {
case "成功":
case "失敗":
location.reload(json.reloadURL); break;
case "最中":
post(); break;
default:
//別の不具合が原因で落ちている可能性
location.reload("404NotFound.aspx");
break;
}

}
</script>
<form method="post" target="Frame1" action="status.aspx">
<input type=hidden name="gamenID" value="xxxx" />
<input type=hidden name="sessionID" value="xxxxx" /><!-- セッションIDは埋め込まないのが普通? -->
<input type=hidden name="dupID" value="xxxxx" /><!-- 多重ログイン防止キー -->
<input type=hidden name="porlingTime" value="1500" />
</form>
</body>

status.aspx は、サーバー処理が完了してない間は、上記HTMLを出力する。
サーバー処理が終わったら、適切な画面への URL 返して完了、とか。


--
サーバーで重たい処理を行う命令を出して、メイン画面がすぐ「処理中」
メッセージを出して終了する。
重たい処理は、DBへ、セッションIDをキーとする進捗状況を示すテンポラ
リテーブルを用意して、そこへ処理状況のフラグをセットする。

クライアントで「処理中」と表示されているブラウザから、定期的にIFRAMEへ
処理状況フラグを見るための ASP を呼び出し、処理の完了を待つ。

--
こーゆー状況を想定した場合は上記のようなロジックで実現できるかと。
ASP の書き方に変えて見て下さい。多少無理があるかも??

# IFRAME へのポストの場合は、右上の旗やら地球儀が回りませんから、
# メッセージ表示するなり、アニメーションGIFなりを動作させて、サーバ
# と同期しているのだから勝手に閉じるなよ、みたいな工夫は必要かも
# しれません。

# XmlHttpRequest でも同じです。日本語に多少の癖がありますが。



引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -