2017-07-19 1 views
0

Ich bin neu in Windows-Service C#. Ich habe eine Klassenbibliothek namens JobAdminLib, die einen Klassenaufruf ArchiveAutomationAdministrator hat. Diese Klasse hat eine Methode namens CountJobs(). Ich habe einen Windows-Dienst erstellt, der diese bestimmte Methode im geplanten Zeitintervall ausführen würde. Aber es scheint nicht für mich zu funktionieren. Protokollberichte sagen, dass sie ausgeführt werden, aber die Funktion, die die Methode ausführen soll, funktioniert nicht.Windows Service-Methode funktioniert nicht

Ich habe beigefügten Code als Referenz

public class ArchiveAutomationAdministrator 
{ 
JobRepository repository = new JobRepository(); 

public IEnumerable<LiveJobs> GetCurrentlyRetentionJobs(Func<LiveJobs, bool> 
criteria = null) 
{ 
return from job in repository.GetCurrentlyRetentionJobs() select job; 
} 

public void countJobs() 
{ 
var count = from job in repository.GetCurrentlyRetentionJobs() select job; 
int[] JobCount = new int[count.Count()]; 

for (int i = 1; i <= JobCount.Length; i++) 
{ 
string jobnumber = repository.GetCurrentlyRetentionJobs().First().JobNumber; 
JobAdministrator admin = new JobAdministrator(repository); 
admin.ArchiveJob(jobnumber); 
} 
} 
} 

Im Anschluss an mein Fenster Service

public partial class Scheduler : ServiceBase 
{ 
private Timer timer1 = null; 
public Scheduler() 
{ 
InitializeComponent(); 
} 

protected override void OnStart(string[] args) 
{ 
timer1 = new Timer(); 
this.timer1.Interval = 5000; 
this.timer1.Elapsed += new 
System.Timers.ElapsedEventHandler(this.timer1_Tick); 
timer1.Enabled = true; 
Library.WriteErrorLog("test windows service started"); 
} 

public void timer1_Tick(object sender, ElapsedEventArgs e) 
{ 
this.task(); 

Library.WriteErrorLog("Job running successfully"); 
} 

protected override void OnStop() 
{ 
timer1.Enabled = false; 
Library.WriteErrorLog("Service Stopped"); 
} 

public void task() 
{ 
Library.WriteErrorLog("Inside task"); 

ArchiveAutomationAdministrator admin = new ArchiveAutomationAdministrator(); 
admin.countJobs(); 
} 
} 
+3

Wenn Sie Ihren Code einrücken würden, wäre das viel besser lesbar. –

+1

Code einrücken! –

+0

Total unlesbar, gibt jeder hier Augenkrebs. Bitte akzeptieren Sie die Bearbeitungsvorschläge. –

Antwort

0

überprüfen, ob Windows-Server die Autorität
laufen muss, wenn es Ok
zu Fenster gehen Serviceliste
1- offener Lauf cmd
2- Typ services.msc
3- rechten Maustaste auf Ihren Dienstnamen
4- in Login Klick Registerkarte auf dem lokalen Account System und Überprüfen Service ermöglichen
Interaktive Beziehung mit Desktop

0

Das countJobs Methode eine verrückte Art und Weise hat der Auflisten einer Liste. Es ist schwer zu sagen, ob dies funktionieren wird, aber die unten versuchen ...

public void countJobs() 
    { 
     foreach (var job in repository.GetCurrentlyRetentionJobs()) 
     { 
      Library.WriteErrorLog("Archiving job " + job.JobNumber); 

      string jobnumber = job.JobNumber; 
      JobAdministrator admin = new JobAdministrator(repository); 
      admin.ArchiveJob(jobnumber); 
     } 
    } 

auf diese Weise Sie in der Schleife erhalten Anmeldung wird, und Sie werden es zu sagen, der Lage sein, wenn etwas tatsächlich Prozess.

Verwandte Themen