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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.7326 の関連記事表示

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

    分類:[ASP.NET (VB)] 

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

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

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

    よろしくお願いします。
親記事 /過去ログ18より / 関連記事表示
削除チェック/

■7339  Re[1]: プロキシ経由のタイムアウト回避について
□投稿者/ Moo -(2007/09/04(Tue) 09:51:09)
>
    1点だけ

    >divタグで区切った範囲だけ、リロードさせる等の技
    AJAXでしょうか。
記事No.7326 のレス /過去ログ18より / 関連記事表示
削除チェック/

■7353  Re[1]: プロキシ経由のタイムアウト回避について
□投稿者/ mあ -(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 でも同じです。日本語に多少の癖がありますが。


記事No.7326 のレス /過去ログ18より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -