2017-01-30 12 views
2

I Quartz verwenden und Beispielcode verwenden und erhält den Fehler:Quarz: nicht implementiert Schnittstelle Mitglied

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 .

Dies ist mein erster Sprung auf Quartz so würde jede mögliche Hilfe freundlich geschätzt.

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

bekam ich den Code direkt aus diesem wunderbaren Artikel: http://www.mikesdotnetting.com/article/254/scheduled-tasks-in-asp-net-with-quartz-net

Antwort

1

ich Ihren Code nur getestet und es kompiliert ohne Änderungen auf meiner Seite. Ihr Problem ist vielleicht ein falscher Namespace-Import. Sie können mit dem vollständigen Namensraum wie folgt versuchen:

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

Vielen Dank für Ihre Hilfe. Ich bekomme immer noch den Fehler. Was benutzt du und welche Version von Quartz benutzt du? – Missy

+0

Ich wechselte zu 2.4.1 und benutzte Ihren Code und es funktionierte. – Missy

3

Es sieht für mich wie Sie die Version 3.0 (zweite Prüfung, die Paket, das Sie von Nuget packte) verwenden. Die IJob-Schnittstelle hat sich geändert. Die Execute-Methode gibt jetzt eine Aufgabe zurück, anstatt eine void-Methode zu sein (was erklärt, warum Sie das Problem sehen, das Sie sehen).

Task Execute( IJobExecutionContext context )

Here are the 3.0 docs.

Wie von Bidou festgestellt, ist Version 3 immer noch in Alpha. Sie müssen diese Version deinstallieren und durch eine vorherige Version ersetzen oder den Code entsprechend anpassen.

+1

Beachten Sie, dass Version 3.0 immer noch in Alpha 2 ist! – Bidou

+1

@Bidou Wahr, ich werde das in meiner Antwort beachten. OP sollte diese Version wahrscheinlich deinstallieren und eine frühere Version installieren, die mit dem referenzierten Tutorial konsistent ist. –

1

Ich hatte den gleichen Fehler.

Es wurde behoben, indem Install-Package Quartz -Version 3.0.0-alpha1 -Pre in der Package Manager Console ausgeführt wurde.

Verwandte Themen