2016-04-07 14 views
0

Ich habe eine ASP.NET App, die E-Mails sendet, wenn der Benutzer sich auf der Website anmeldet. Ich benutze Hangfire, um die Jobs zu verwalten und postalisch, um E-Mails zu senden.Legen Sie fest, dass ein Auftrag mit Hangfire mit ASP.NET fehlgeschlagen ist.

Es funktioniert alles gut, aber hier ist das Ding:

ich der Superuser ändern möchten, wie oft die APP die E-Mail vor dem Löschen den Job senden.

Hier ist mein Code

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); 
      } 
     } 
    } 

Antwort

0

Warum nicht nur Attribute hinzufügen es automatisch zu handhaben?

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

Oder Sie könnten nur Ihr eigenes Attribut machen, die die AutommaticRetryAttribute Klasse imitiert, aber sie behandeln es wie Sie wollen?

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

+0

Nun, Punkt ist, ich die Super-User wollen die Anzahl der Versuche zu dürfen, ändern. Deshalb möchte ich auf meine Art damit umgehen. – ggderas

+0

Rechts. Sie können Ihr eigenes AutomaticRetry-Attribut erstellen, indem Sie überprüfen, wie das AutomaticRetryAttribute ausgeführt wurde, aber vielleicht durch Ihre eigenen Bedingungen ersetzen? –