2016-04-07 10 views
0

У меня есть приложение ASP.NET, которое отправляет электронные письма всякий раз, когда пользователь регистрируется на веб-сайте. Я использую hangfire, чтобы управлять заданиями и почтой, чтобы отправлять электронные письма.Задайте задачу неудачной с использованием Hangfire с помощью ASP.NET?

Это все прекрасно работает, но вот незадача:

Я хочу суперпользователь изменить, сколько раз приложение может отправить по электронной почте перед удалением задания.

Вот мой код

public static void WelcomeUser(DBContexts.Notifications not) 
    { 
     try{ 
      var viewsPath = Path.GetFullPath(HostingEnvironment.MapPath(@"~/Views/Emails")); 
      var engines = new ViewEngineCollection(); 
      engines.Add(new FileSystemRazorViewEngine(viewsPath)); 

      Postal.EmailService service = new Postal.EmailService(engines); 

      WelcomeUserMail welcomeUserMail = new WelcomeUserMail(); 
      welcomeUserMail.To = not.ReceiverEmail; 
      welcomeUserMail.UserEmail = not.ReceiverEmail; 
      welcomeUserMail.From = BaseNotification.GetEmailFrom(); 

      service.Send(welcomeUserMail); 
     } 
     catch(Exception e) 
     { 
      DBContexts.DBModel dbModel = new DBModel(); 
      DBContexts.Notifications notificacionBD = dbModel.Notifications.Find(not.NotificationID); 

      notificacionBD.Status = false; 
      notificacionBD.Timestamp = DateTime.Now; 
      notificacionBD.Error = e.Message; 

      int numberOfRetriesAllowed = ParameterHelper.getNumberOfRetriesAllowed(); 

      if (notificacionBD.Retries > numberOfRetriesAllowed) 
      { 
       //In this case Hangfire won't put this job in the failed section but rather in the processed section. 
       dbModel.SaveChanges(); 
      } 
      else 
      { 
       notificacionBD.Retries++; 
       dbModel.SaveChanges(); 

       throw new Exception(e.Message); 
      } 
     } 
    } 

ответ

0

Почему бы не просто добавить атрибуты для обработки автоматически?

[AutomaticRetry(Attempts = 10, LogEvents = true, OnAttemptsExceeded = AttemptsExceededAction.Delete)] 
public void MyTask(){ 
    //doing stuff 
} 

Или вы могли бы просто сделать свой собственный атрибут, который имитирует класс AutommaticRetryAttribute но справиться с этим, как вы хотите?

https://github.com/HangfireIO/Hangfire/blob/a5761072f18ff4caa80910cda4652970cf52e693/src/Hangfire.Core/AutomaticRetryAttribute.cs

+0

Ну, дело в том, я хочу суперпользователя, чтобы иметь возможность изменить количество попыток. Вот почему я хочу справиться с этим по-своему. – ggderas

+0

Справа. Вы можете создать свой собственный атрибут AutomaticRetry, просмотрев, как автоматически выполнялся автоматическийRetryAttribute, но заменив ваши собственные условия, может быть? –

 Смежные вопросы

  • Нет связанных вопросов^_^