2

そのため、Ajax POST から呼び出される Update コントローラーを使用した .NET MVC プロジェクトがあり、実行に時間がかかり、タイムアウト例外が発生する可能性があります。

ローカル マシンでデバッグすると正常に動作しますが、Azure Web サイトに公開してそこから更新すると、要求が正常に完了せず、Chrome のコンソール レポートが次のように表示されます。

POST http://mysiteaddress/Admin/UpdateLibrary/Update?Length=13 504 (Proxy Timeout ( This operation returned because the timeout period expired. )) 

Firefox 内のリモート デスクトップで同じ操作を試みると、コンソールに次のレポートが表示されます。

[07:42:13.856] POST http://mysiteaddress/Admin/UpdateLibrary/Update?Length=13 **[HTTP/1.1 502 Bad Gateway 182940ms]** 

web.config ファイル内で長いタイムアウトを設定しようとしました

    <httpRuntime executionTimeout="2000"/>

そして、私のajax呼び出しの本体内

    $.ajax({
        url: this.action,
        type: 'POST',
        data: $(this).serialize(),
        success: function (data) {
            document.write(data);
        },
        failure: function (XMLHttpRequest, textStatus, errorThrown) {
                console.log(XMLHttpRequest);
                console.log(textStatus);
                console.log(errorThrown);
        },
        timeout: 2000000 //Milliseconds
    });

しかし、喜びはありません。

4

2 に答える 2

3

したがって、これは実際には修正ではなく、回避策です。単一の長いリクエストを行う代わりに、長時間実行されているプロセスが終了したかどうかを判断する json を返す ActionResult を JavaScript に繰り返しクエリさせました。完了すると、ブラウザーを結果画面にリダイレクトします。

    $.updateProgressbar = function () {
        $.get('@Url.Action("GetStatus", "UpdateLibrary", new { countryId = countryId }, Request.Url.Scheme)', function (data) {
            $('#progressbar').progressbar('value', data.progress)
            if (data.currentItem != null) {
                $('#currentWorkItem').text('@l12.View_Update_currentlyWorking' + data.currentItem);
        }
            if (data.progress == 100) {
                window.location =
                    '@Url.Action("UpdateResults", "UpdateLibrary", new { countryId = countryId }, Request.Url.Scheme)';
            } else {
                setTimeout($.updateProgressbar, 5000);
            }
        });
    };

    $(function () {
        $("#progressbar").progressbar({ value: 0 });
        setTimeout($.updateProgressbar, 5000);
    });
于 2013-07-12T17:52:14.997 に答える