2017-01-30 5 views
2

J'utilise Quartz et en utilisant le code d'échantillon et obtenir l'erreur:Quartz: n'implémente pas membre d'interface

CS0738 'EmailJob' does not implement interface member IJob.Execute(IJobExecutionContext) . EmailJob.Execute(IJobExecutionContext) cannot implement IJob.Execute(IJobExecutionContext) because it does not > have the matching return type of Task .

Ceci est mon premier rendez-vous à Quartz de sorte que toute aide serait appréciée aimablement.

public class EmailJob : IJob // <<<--- Error on this line 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     using (var message = new MailMessage("[email protected]", "[email protected]")) 
     { 
      message.Subject = "Test"; 
      message.Body = "Test at " + DateTime.Now; 
      using (SmtpClient client = new SmtpClient 
      { 
       EnableSsl = true, 
       Host = "smtp.gmail.com", 
       Port = 587, 
       Credentials = new NetworkCredential("[email protected]", "password") 
      }) 
      { 
       client.Send(message); 
      } 
     } 
    } 

public class JobScheduler 
    { 
     public static void Start() 
     { 
      IScheduler scheduler = (IScheduler)StdSchedulerFactory.GetDefaultScheduler(); 
      scheduler.Start(); 

      IJobDetail job = JobBuilder.Create<EmailJob>().Build(); 

      ITrigger trigger = TriggerBuilder.Create() 
       .WithDailyTimeIntervalSchedule 
        (s => 
        s.WithIntervalInHours(24) 
        .OnEveryDay() 
        .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0)) 
       ) 
       .Build(); 

      scheduler.ScheduleJob(job, trigger); 
     } 
    } 

J'ai obtenu directement le code de cet article merveilleux: http://www.mikesdotnetting.com/article/254/scheduled-tasks-in-asp-net-with-quartz-net

Répondre

1

Je viens de tester votre code et il compile sans aucun changement de mon côté. Votre problème est peut-être une mauvaise importation d'espace de noms. Vous pouvez essayer avec l'espace de noms complet comme celui-ci:

public class EmailJob : Quartz.IJob 
{ 
    public void Execute(Quartz.IJobExecutionContext context) 
    { 
     using (var message = new MailMessage("[email protected]", "[email protected]")) 
     { 
      message.Subject = "Test"; 
      message.Body = "Test at " + DateTime.Now; 
      using (SmtpClient client = new SmtpClient 
      { 
       EnableSsl = true, 
       Host = "smtp.gmail.com", 
       Port = 587, 
       Credentials = new NetworkCredential("[email protected]", "password") 
      }) 
      { 
       client.Send(message); 
      } 
     } 
    } 

    // ... 
} 
+0

Nous vous remercions de votre aide. Je reçois toujours l'erreur. Quelles sont vos utilisations et quelle version de Quartz utilisez-vous? – Missy

+0

Je suis passé en 2.4.1 et j'ai utilisé votre code et cela a fonctionné. – Missy

3

Il me semble que vous utilisez la version 3.0 (vérifiez quel paquet vous avez pris de Nuget). L'interface IJob a changé. La méthode Execute renvoie maintenant une tâche au lieu d'être une méthode void (ce qui explique pourquoi vous voyez le problème que vous voyez).

Task Execute( IJobExecutionContext context )

Here are the 3.0 docs.

Comme noté par Bidou, la version 3 est toujours en alpha. Vous devez désinstaller cette version et la remplacer par une version précédente, ou ajuster votre code en conséquence.

+1

Notez que la version 3.0 est toujours en Alpha 2! – Bidou

+1

@Bidou Vrai, je vais le noter dans ma réponse. OP devrait probablement désinstaller cette version et installer une version antérieure compatible avec le tutoriel référencé. –

1

J'ai eu la même erreur.

Correction du problème en exécutant Install-Package Quartz -Version 3.0.0-alpha1 -Pre dans la console du gestionnaire de packages.