Фоновое задание Hangfire остается в очередиC#

Место общения программистов C#
Ответить
Anonymous
 Фоновое задание Hangfire остается в очереди

Сообщение Anonymous »

У меня есть приложение MVC, и я пытаюсь отправить электронное письмо с помощью Hangfire и Postal. Письмо должно быть отправлено после регистрации.
Регистрация работает правильно, но задание, которое я запускаю, остается в очереди, и я не получаю никаких писем.
Итак, в моем контроллере MVC у меня есть следующий код:

public async Task Register(RegisterViewModel model)
{
//register correctly the user

//I send the email
BackgroundJob.Enqueue(() =>
NotifyRegistration(user.Id, user.UserName, user.Email)
);

...
}

[AutomaticRetry(Attempts = 5)]
public async Task NotifyRegistration(string userId, string username, string email)
{
//I calculate callbackUrl

var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails"));
var engines = new ViewEngineCollection();
engines.Add(new FileSystemRazorViewEngine(viewsPath));

var emailService = new EmailService(engines);

var emailToSend = new NewRegisteredUserEmail
{
To = email, UserName = username, CallbackUrl = callbackUrl
};

emailService.Send(emailToSend);
}


Я не могу отладить метод NotifyRegistration. Я не знаю, почему. Я использую Postal, поэтому EmailService — не моя реализация. Вот как я настроил службу smtp:










Если я запускаю панель Hangfire, я вижу запрошенные задания.

Изображение


Но больше ничего не произошло.
Что мне не хватает? отправить письмо?

Спасибо

ОБНОВЛЕНИЕ
В файле start.cs я написал это:

var options = new SqlServerStorageOptions
{
QueuePollInterval = TimeSpan.FromSeconds(1)
};

GlobalConfiguration.Configuration
.UseSqlServerStorage("DbConnectionString", options)
.UseFilter(new LogEmailFailureAttribute());

app.UseHangfireDashboard();
app.UseHangfireServer();


ОБНОВЛЕНИЕ 2
Я преобразовал свою регистрацию NotifyRegistration следующим образом:

[AutomaticRetry(Attempts = 5)]
public async Task NotifyRegistration(string userId, string username, string email, EmailService emailService)
{
//I calculate callbackUrl

var emailToSend = new NewRegisteredUserEmail
{
To = email, UserName = username, CallbackUrl = callbackUrl
};

emailService.Send(emailToSend);
}


Подробнее здесь: https://stackoverflow.com/questions/395 ... n-enqueued
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»