2016-08-04 45 views
0

Ich habe einen C# Windows-Dienst auf einer Windows 2012 R2 Standard Edition ausgeführt. Wir stoppen und starten diesen Dienst täglich mit dem Service Control Manager (SCM), und dies ist in der Vergangenheit gut gelaufen.Probleme bei der Steuerung eines .Net Windows-Dienstes

Aber in letzter Zeit sehen wir ein Verhalten, bei der

1.We das Timeout für den Start zu erhöhen benötigt und stoppt Funktionalität des Service

2.Also, als wir versuchen, den Dienst zu beenden sehen wir, dass der Stop-Button (und auch der Start-Button) für diesen Dienst im SCM ausgegraut sind. Dies zwang uns dazu, zum Task-Manager zu gehen, den Dienst zu beenden und ihn erneut zu starten.

Fragen nur was ist der Grund für dieses Verhalten.

foreach (Product p in Products) 
      { 
       Parallel.Invoke(() => {//Call a third part web service1} 
     Parallel.Invoke(() => {//Call a third part web service2} 
    } 

(Die Produktliste ist 200 hier)

So mußte wissen, ob diese bestimmte Code Änderung: vor kurzem hat nach folgendem Code im Konstruktor of Service Zugabe

Offenbar scheint dies gestartet ist wirklich der Grund für dieses Verhalten? Bitte beraten.

Danke für Ihre Hilfe.

Antwort

1

Ihre Parallel.Invoke Anruf scheint sinnlos, nur aus der invoke eine Aktion aufrufen, dass Ihr Code verursacht äquivalent zu

foreach (Product p in Products) 
{ 
     {//Call a third part web service1} 
     {//Call a third part web service2} 
} 

Sie können sehen, warum das eine Weile dauern könnte zu laufen.

Allerdings, auch wenn Sie dieses Problem behoben haben, nur weil es parallel ist, bedeutet nicht, dass es schnell ist. Mach keine schwere Arbeit im Konstruktor, spawne einen neuen Thread in OnStart und mache das dort.

+0

Ok.Thanks.And wie erklären wir bitte den Grund für Stop-Button als ausgegraut? –

+0

Sobald ein Dienst in einem "fehlerhaften" Zustand ist, weil er zu lange braucht, um das gesamte System zu unterbrechen, hört er auf, mit dem Dienst zu sprechen. –