SignalR отключается через 3 минуты и при повторном подключении после отключения процесс начинается снова с нулевой точки - PullRequest
0 голосов
/ 03 июля 2018

Сценарий: я отправляю 1000+ писем , используя sendgrid api. и я использовал signalR для уведомления пользователя о том, сколько писем было доставлено, а сколько - нет при отправке писем. Через три минуты соединение сигнализатора отключается. я получаю сообщение об ошибке Соединение разорвано из-за неактивности более 30 секунд.

я пытался установить нулевое свойство keep-alive, а также в течение 5 дней, То же самое для тайм-аута соединения. когда я устанавливаю эти свойства, я не получаю сообщение об ошибке. Но Connection отключается и перезапускается, и процесс отправки электронных писем начинается с нуля.

вот мой код

$(function () {

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

        // Create a function that the hub can call back to display messages.
        // Function To nitify the user of email state
        progress.client.AddProgress = function (message, percentage, delivered, error) {                
            ProgressBarModal("show", delivered, error, message);
            $("#ProgressMessage").css("width", percentage + "%");                
            $('#ProgressMessage').text(percentage + "%");
            if (percentage == "100%") {
                ProgressBarModal();
            }
        };

        $.connection.hub.start({ pingInterval: null }).done(function () {
            var connectionId = $.connection.hub.id;
        });

        $.connection.hub.connectionSlow(function () {
            console.log("connectionSlow");
        });

        $.connection.hub.reconnecting(function () {
            console.log("Reconnecting Hub ");
        });

        $.connection.hub.disconnected(function () {                
            if ($.connection.hub.lastError) {
                alert("Disconnected. Reason: " + $.connection.hub.lastError.message);
            }

            // Restart connection after 5 seconds.
            setTimeout(function () {
                $.connection.hub.start();
            }, 6); 

        });
    });

Код хаба

public class ProgressHub : Hub
{
    public static void SendProgress(string progressMessage, int progressCount, int totalItems, int delivered, int error)
    {
        try
        {                                
            IHubContext context = GlobalHost.ConnectionManager.GetHubContext<ProgressHub>();

            //CALCULATING PERCENTAGE BASED ON THE PARAMETERS SENT
            var percentage = (progressCount * 100) / totalItems;

            progressMessage = "Processed Mails " + progressCount + " out of " + totalItems + ".";

            //PUSHING DATA TO ALL CLIENTS
            context.Clients.All.AddProgress(progressMessage, percentage.ToString(), delivered, error);
        }
        catch (Exception ex)
        {
            throw;
        }
    }
}

и я вызываю это в контроллере c #. Действие в цикле for, и цикл спит в течение 1 минуты после каждых 100 отправленных писем независимо от статуса электронной почты.

ProgressModalUiUpdate(progressbarResult, campaignSessionid, errorCount, hubCount, totalNoOfMailsToBeSend);

Может кто-нибудь помочь мне решить проблему.

...