Сценарий: я отправляю 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);
Может кто-нибудь помочь мне решить проблему.