我可以使用SignalR 3或AJAX来停止长文件下载的超时

时间:2016-04-07 03:45:12

标签: ajax signalr

我有一个ajax POST,它将CSV文件发送到服务器。我有signalR 3工作,通过进度条告知客户在哪里通过16000个奇数记录进行处理。它适用于小型文件,处理完成时间不到两分钟。任何时候处理都需要更长的时间。

我看了here而不是我需要的......和

我尝试使用" .timeout:600000"添加延长超时在POST但但不起作用。它仍然超过2分钟,但处理工作,数据库仍然更新,它甚至尝试发回那些新的记录。

我可以使用SignalR服务器调用来保持会话活动吗? (如何使用SignalR 3)?

我可以使用AJAX吗?

我需要等待超过8分钟以避免超时。

AJAX代码:

    //On button click POST file and signalR connection Id back to controller.
    $('#SubmitFile').click(function (e) {
        e.preventDefault(); // <------------------ stop default behaviour of button
        var url = "/SuburbsAndPostcodesAdmin/FileIndexView";
        var connId = $.connection.hub.id;
        var fd = new FormData();
        fd.append('File', $("#txtFileUpload")[0].files[0]);
        fd.append('connId', connId);
        //Post back the file with the SignalR Id.
        $.ajax({
            type: "POST",
            url: url,
            data: fd,
            processData: false,
            contentType: false,
            success: function (result) {
                //display the results in a partial view.
                $("#DisplayResults").html(result);
            },
            error: function (xhr, status, error) {
                alert(xhr.responseText);
            },
        });
    });

SignalR客户端代码:

        // Reference the auto-generated proxy for the hub.
    var progress = $.connection.progressHub;

    // Start the connection.
    $.connection.hub.start().done(function () {
        connectionId = $.connection.hub.id;
        $("#SubmitFile").removeAttr("disabled");
        $("#initialise").html("<h4>" + "Ready to upload" + "</h4>" + "<br /> " + "<br />");
    });

更新进度条:

        //Send from server to the client process current notification.
    progress.client.notifyProgress = function (processedRecords, newRecords, percentage) {
        $("#NoOfRecordsProcessedValue").text(processedRecords);
        $("#NoOfNewRecordsFoundValue").text(newRecords);
        $('.progress-bar')
              .css('width', percentage + '%')
              .attr('aria-valuenow', percentage);
        if (percentage > 5) {
            $("#workDone").text(percentage + "%");
        }
    };

0 个答案:

没有答案