Entwickler-Ecke
Sonstiges (.NET) - Service
kerstel - So 08.02.15 17:51
Titel: Service
Hallo,
ich möchte einen Service entwickeln der zu einem bestimmten Zeitpunkt Artikeldaten von einem FTP holt und verarbeitet. Ich bin auf folgende Fragen gestoßen:
:: Wie kann ich sagen, dass der Service immer um 23:56 eine bestimmte Funktion ausführt?
:: Wie kann ich einen Prozess von einem externen Programm aus ansteuern? Als Bsp. der Artikelimport läuft immer um 23:56, aus irgend einem Grund müsste er aber jetzt laufen. zb. eine Datei in ein Verzeichnis legen und der Dienst prüft sekündlich ob diese da ist? Ist das so sinnvoll?
:: Wie kann ich den Dienst testen, ohne ihn installieren zu müssen?
Danke für die Hilfe
LG
Ralf
Ralf Jansen - So 08.02.15 18:11
Zitat: |
:: Wie kann ich sagen, dass der Service immer um 23:56 eine bestimmte Funktion ausführt? |
Dein Service muss irgendwas tun sonst beendet der sich automatisch. Er könnte zum Beispiel regelmäßig die Uhrzeit prüfen und bei Zeiten dann irgendeine Funktion ausführen.
Zitat: |
Wie kann ich einen Prozess von einem externen Programm aus ansteuern? Als Bsp. der Artikelimport läuft immer um 23:56, aus irgend einem Grund müsste er aber jetzt laufen. zb. eine Datei in ein Verzeichnis legen und der Dienst prüft sekündlich ob diese da ist? Ist das so sinnvoll? |
In dem du ihm ein Interface gibst über das es von jemand anderem angesprochen werden kann. Es gibt da Dutzende von Techniken die man benutzen kann. Alle unter dem Stickwort IPC (Inter Process Communication) zu finden.
Zitat: |
:: Wie kann ich den Dienst testen, ohne ihn installieren zu müssen? |
Es steht in der
Doku [
https://msdn.microsoft.com/de-de/library/zt39148a%28v=vs.110%29.aspx] wie man einen Dienst schreibt. Ein Dienst hat eine Main Methode wie jedes andere Programm auch. Also in der Main einfach einen Kommandozeilenparameter abfragen und entweder so starten wie bei jedem Executable oder eben denn üblichen Service Startcode ausführen.
Warum soll das ein Dienst sein? Ein Dienst ist was was ständig im Hintergrund laufen soll. Etwas das einmal am Tag bzw. ganz oder manuell laufen soll würde ich eher als simple Consolenanwendung auslegen und für das regelmäßige ausführen einfach im Windows Taskscheduler einen entsprechenden Ausführungsplan anlegen.
kerstel - So 08.02.15 18:23
Hi,
da werden noch andere sachen rein laufen, weshalb das zu einem Dienst führt :)
Was bedeutet "er muss irgendwas tun"? Wie stellt sich das dar?
LG
Ralf
Jakane - Di 24.02.15 10:26
kerstel hat folgendes geschrieben : |
Was bedeutet "er muss irgendwas tun"? Wie stellt sich das dar?
|
Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TDienst.ServiceExecute(Sender: TService); begin while not Terminated do begin ServiceThread.ProcessRequests(False); end; end; |
Ein Programm läuft bis es Beendet wurde.
Ein Dienst läuft solange er was zu tun hat.
Du musst also nur "verhindern" das er das Beenden erreicht.
Sobald ServiceExecute beendet ist, beendet sich auch der Dienst
Jakane - Di 24.02.15 10:29
kerstel hat folgendes geschrieben : |
:: Wie kann ich sagen, dass der Service immer um 23:56 eine bestimmte Funktion ausführt?
|
Ich habe einen Timer in einem DataModul der die Zeit prüft und zur gegebenen Zeit etwas tut.
Ein Problem das ich aber damit nicht lösen konnte ist, dass der Dienst damit immer prüft ob er was tun darf und damit hält er die Serverauslastung auf schwachen PC's / Servern hoch :(
Jakane - Di 24.02.15 10:30
kerstel hat folgendes geschrieben : |
:: Wie kann ich einen Prozess von einem externen Programm aus ansteuern? Als Bsp. der Artikelimport läuft immer um 23:56, aus irgend einem Grund müsste er aber jetzt laufen. zb. eine Datei in ein Verzeichnis legen und der Dienst prüft sekündlich ob diese da ist? Ist das so sinnvoll?
|
Auch das Problem kann mit einem DataModul gelöst werden, indem man eine Anwendung schreibt und dort auch manuelles Anstossen ermöglicht
Jakane - Di 24.02.15 10:31
kerstel hat folgendes geschrieben : |
:: Wie kann ich den Dienst testen, ohne ihn installieren zu müssen?
|
Ich konnte bisher keinen Dienst testen ohne ihn zu installieren, da der Dienst im Hintergrund läuft.
Ralf Jansen - Di 24.02.15 10:33
Es geht um C# .Net nicht Delphi.
Xion - Di 24.02.15 13:14
Jakane hat folgendes geschrieben : |
Ein Problem das ich aber damit nicht lösen konnte ist, dass der Dienst damit immer prüft ob er was tun darf und damit hält er die Serverauslastung auf schwachen PC's / Servern hoch :( |
Du kannst dem Scheduler von Windows normalerweise sagen, dass du nichts zu tun hast. Wenn du weist, zu welchem Zeitpunkt du eine Aktion ausführen möchtest, z.B. um 12:00Uhr, und es ist jetzt 11:00Uhr, dann sag dem Scheduler einfach, dass du 30min nichts zu tun hast.
In Delphi sieht das so aus:
In C# gibts das sicher auch.
Siehe auch:
https://en.wikipedia.org/wiki/Sleep_(system_call)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!