Laden...

[Web Services] Zu bestimmter Zeit Methode ausführen? (Timerjob)

Erstellt von 1nf1n1ty vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.827 Views
1nf1n1ty Themenstarter:in
286 Beiträge seit 2007
vor 15 Jahren
[Web Services] Zu bestimmter Zeit Methode ausführen? (Timerjob)

Hallo zusammen,

ist es möglich in einem Web Service eine Art Timerjob zu implementieren, mit dem man zu einer bestimmten Uhrzeit eine Methode aufruft, die dann z.B. Daten in der Datenbank ändert? Wenn ja wo finde ich Informationen darüber bzw. wie funktioniert das?

Grüße

Marco

313 Beiträge seit 2006
vor 15 Jahren

Das bezeichnet man als Cronjob. Naja, es gibt auch andere moeglichkeiten, z.b. wenn du ne stark frequentierte seite hast, eifnach laufend die zeit abfragen, oder mittels ajaxlaufnd was neuladen und bei der jeweiligen zeit dann reagieren,..

1nf1n1ty Themenstarter:in
286 Beiträge seit 2007
vor 15 Jahren

Hallo Ploetzi,

ich möchte nur 1x pro Tag (z.B. morgens um 1.00) überprüfen ob das Datum eines Datensatzes eingetreten ist und daraufhin ein Feld in der Datenbank ändern, mehr nicht. Dabei kann es sich jedoch um viele Datensätze handeln.

Grüße

Marco

G
497 Beiträge seit 2006
vor 15 Jahren

das macht man normalerweise über einen Webdienst-Client, der dann über den Windows-Zeitplandienst eingeplant wird. Im Prinzip also eine Konsolen- oder WinForms-Anwendung, die selbständig nach dem Start den Webdienst anspricht und damit die gewünschte Aktion auslöst. Hat auch den Vorteil, daß man z. B. die Einplanung sehr einfach ändern oder die Ausführung auch mehrfach täglich planen kann.

X
1.177 Beiträge seit 2006
vor 15 Jahren

Hallo,

Ein Webservice ist nicht dazu gedacht zu einer bestimmten Zeit etwas zu tun, denn er reagiert eigentlich immer nur auf Aufrufe von aussen. Es ist also nicht sichergestellt dass der Webservice zu dem geplanten Zeitpunkt überhaupt läuft. (Man kann einen Thread in der Applikation starten, der z.B. alle 1 sek. die Bedingungen prüft und dann was macht, ist aber nicht sichergestellt dass er immer läuft, also nicht zu empfehlen)

Wenn es ein Dienst sein muss, würde ich direkt einen echten Dienst schreiben. Wenn es auch ein normales Programm erledigen kann, dann einfach wie GarlandGreene meinte per Task zu einem bestimmten Zeitpunkt das Programm starten (allerdings würde ich den Umweg über den Webservice auslassen).

Wenn es wirklich um Datenbanken geht, SQLServer hat z.B. selbst sowas dabei - Aufträge im SQLServer Agent.

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

S
142 Beiträge seit 2007
vor 15 Jahren

Hallo allerseits,
"Cronjob" nennt man das unter Unix. Unter Windows wäre etwas vergleichbares wohl das Schedule system.

1nf1n1ty:
In der Theorie fällt mir dazu ein Webservice mit 2 Methoden ein...

Methode1:
Permanente Schleife die die Uhrzeit überprüft und danach
Thread.Sleep(60000); aufruft um eine Minute zu warten.
Im Falle einer Übereintreffung wird Methode2 aufgerufen:

Methode2:
Verarbeitung findet statt
Methode1() wird wieder aufgerufen.

Das ist allerdings ein arg zusammengeschustertes System und widerspricht dem eigentlichen Sinn von Webservices wie gesagt zu 100%, da wären Schedules sicherlich angebrachter....

Aber konkret fällt mir gerade Nichts ein, weshalb das nicht funktionieren sollte^^ Wenn es denn wirklich garnicht anders geht...

Mfg Steav

G
497 Beiträge seit 2006
vor 15 Jahren

Hallo,
Wenn es ein Dienst sein muss, würde ich direkt einen echten Dienst schreiben. Wenn es auch ein normales Programm erledigen kann, dann einfach wie GarlandGreene meinte per Task zu einem bestimmten Zeitpunkt das Programm starten (allerdings würde ich den Umweg über den Webservice auslassen).

den Webservice lasse ich in solchen Fällen nicht aus, weil ich damit den Datenbankzugriff über eine einzelne Komponente kapseln kann. Muss ich irgendwann die Datenbank umbauen (sei es ein Serverwechsel, Wechsel der Datenbank oder ähnliches), muss ich nur diese eine Komponente anpassen - alle an diese Komponente angeschlossenen Anwendungen bemerken davon dann nichts.

1.378 Beiträge seit 2006
vor 15 Jahren

Hallo,
Wenn es ein Dienst sein muss, würde ich direkt einen echten Dienst schreiben. Wenn es auch ein normales Programm erledigen kann, dann einfach wie GarlandGreene meinte per Task zu einem bestimmten Zeitpunkt das Programm starten (allerdings würde ich den Umweg über den Webservice auslassen).

den Webservice lasse ich in solchen Fällen nicht aus, weil ich damit den Datenbankzugriff über eine einzelne Komponente kapseln kann. Muss ich irgendwann die Datenbank umbauen (sei es ein Serverwechsel, Wechsel der Datenbank oder ähnliches), muss ich nur diese eine Komponente anpassen - alle an diese Komponente angeschlossenen Anwendungen bemerken davon dann nichts.

Na das ist ja auch nicht so schlecht. Kannst ja ein Programm schreiben, das vom Windows Schedule aufgerufen wird welches widerum dein WebService verwendet um die Änderungen an der Datenbank durchzuführen. Somit hast diese Logik aus der Schnittstelle(WebService) rausgeholt.

Lg XXX

1nf1n1ty Themenstarter:in
286 Beiträge seit 2007
vor 15 Jahren

Hallo zusammen,

schade das es so nicht funktioniert. Dann werde ich wohl einen extra Task oder einen Windowsservice dafür anlegen oder sowas in der Art. Die Geschichte mit Thread.Sleep wäre zwar eine Idee und sowas ähnliches hatte ich auch mal überlegt, jedoch schien mir das nicht so eine optimale Lösung zu sein. Hat derjenige der den Vorschlag gemacht hat ja auch selber geschrieben. Vielen Dank trotzdem.

Grüße

Marco

X
1.177 Beiträge seit 2006
vor 15 Jahren

Hallo,
Wenn es ein Dienst sein muss, würde ich direkt einen echten Dienst schreiben. Wenn es auch ein normales Programm erledigen kann, dann einfach wie GarlandGreene meinte per Task zu einem bestimmten Zeitpunkt das Programm starten (allerdings würde ich den Umweg über den Webservice auslassen).

den Webservice lasse ich in solchen Fällen nicht aus, weil ich damit den Datenbankzugriff über eine einzelne Komponente kapseln kann. Muss ich irgendwann die Datenbank umbauen (sei es ein Serverwechsel, Wechsel der Datenbank oder ähnliches), muss ich nur diese eine Komponente anpassen - alle an diese Komponente angeschlossenen Anwendungen bemerken davon dann nichts.

Joa, diese Vorgehensweise ist mir auch bekannt^^ Nur baue ich immer dll's die ich dann entsprechend einbinde.

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.