Ich bin neu in der Arbeit mit Windows Services. Obwohl ich gelernt habe, Windows-Dienste in VS2010 zu erstellen, möchte ich einige praktische Möglichkeiten kennen, wie Windows- Dienste verwendet werden können.
Ich habe versucht, unter Berücksichtigung des aktuellen Kontexts zu googeln, um weitere Lernprogramme zum Erstellen von Windows-Diensten zu finden.
BEARBEITEN Sie auf Prämienangebot:
Alle Antworten sind großartig, aber ich habe nach praktischen Beispielen für Windows-Dienste und deren Auswirkungen gesucht . Auf diese Weise erfahren Entwickler, wann es angebracht ist, sie in der Fallstudie zu verwenden.
Antworten:
Ein Dienst wird im Hintergrund ausgeführt, auch wenn niemand am Computer angemeldet ist. Alles, was Sie sich vorstellen können, ohne sich darauf verlassen zu müssen, dass eine Person eine App startet und auf eine Schaltfläche klickt, ist ein guter Kandidat für einen Dienst. Wenn Sie beispielsweise einen Ordner überwachen und eine Datei in diesen Ordner schreiben, müssen Sie sie auf irgendeine Weise verarbeiten. Jeder "Server", an den Sie denken - Webserver, FTP-Server, Mail-Server - ist ein Dienst, und so sind viele Hintergrundprozesse, an die Sie vielleicht nicht oft denken.
Einige Dinge, die früher als Dienste geschrieben wurden (Sicherungsdateien um 2 Uhr morgens, Erinnerungs-E-Mails um 3 Uhr morgens usw.), sind heute wahrscheinlich besser als geplante Aufgaben zu erledigen, die unter Windows 7 und höher eine enorme Flexibilität aufweisen, die der Entwickler jedoch nie erlernt hat Das System muss XP unterstützen. Sie finden auch Dienste, die diese Art von Aufgaben erledigen.
quelle
Dienste unter Windows sind im Grunde genommen Programme, die ohne GUI ausgeführt werden. Webserver (z. B. Apache), Datenbankserver (z. B. MySQL- und SQL-Server), Antiviren-Engines und Anwendungsserver / Middleware-Server sind praktische Beispiele für Anwendungen, die häufig als Dienste ausgeführt werden. Möglicherweise gibt es einen GUI-Client, mit dem Sie mit dem Dienst interagieren können, der Dienst selbst verfügt jedoch nicht über einen solchen. Es läuft einfach im Hintergrund und macht sein Ding. Da Dienste mit den ihnen zugewiesenen Benutzerrechten ausgeführt werden , können sie außerdem als der ihnen zugewiesene Benutzer ausgeführt werdenGibt an, ob ein Benutzer tatsächlich am Computer angemeldet ist. Ein Datenbankserver hätte also die gleichen Zugriffsrechte, unabhängig von der Person, die zum jeweiligen Zeitpunkt am Computer angemeldet war. Sie können also erkennen, warum dies wichtig ist - Sie möchten beispielsweise nicht, dass ein Benutzer angemeldet bleibt, um einen Webserver am Laufen zu halten.
Sie sind das Windows-Äquivalent (auf die praktischste Weise) zu Daemons unter * nix.
quelle
Bedienung
Ein Programm, eine Routine oder ein Prozess, der eine bestimmte Systemfunktion ausführt, um andere Programme zu unterstützen, insbesondere auf einer niedrigen Ebene (in der Nähe der Hardware). Wenn Dienste über ein Netzwerk bereitgestellt werden, können sie in Active Directory veröffentlicht werden, wodurch die dienstzentrierte Verwaltung und Verwendung erleichtert wird.
Gemäß der Service-Definition bieten Window Service und andere Arten von Services viele Funktionen. In diesem Zusammenhang sind Suchmaschinen Ihr Freund .
Windows-Dienste werden normalerweise verwendet, wenn eine Anwendung kontinuierlich ausgeführt werden muss. Sie sollten einen Windows-Dienst erstellen, um Code ohne Benutzerinteraktion im Hintergrund auszuführen .
Ein Windows-Dienst wird ausgeführt, auch wenn niemand angemeldet ist. Der Windows-Dienst kann ausgeführt werden, sobald der Computer eingeschaltet ist. Dies ist ideal, um ihn als Server, beispielsweise als http-Server, auszuführen. Niemand muss sich anmelden.
Zum Beispiel, wenn sie müssen:
Ich würde einen Dienst aus folgenden Gründen nutzen:
Sie erhalten einige der Verwaltungsbefehle kostenlos eingebaut.
O Start
o Stopp
o Pause
o Fortfahren
Sie können Serverereignisse wie das Herunterfahren verarbeiten.
Links mit zusätzlichen Informationen zu diesen Diensten:
Bei Asp.net - // TODONT: Verwenden Sie einen Windows-Dienst, um einen geplanten Prozess auszuführen.
Was ist die Verwendung des Windows-Dienstes?
quelle
Ein interaktives Programm, wie z. B. eine Winform oder eine WPF, soll von einem Benutzer geöffnet, interagiert und geschlossen werden. Eine geplante Aufgabe soll zu bestimmten Zeiten im Hintergrund ausgeführt werden - möglicherweise nur gestartet, ausgeführt und angehalten werden. Ein Windows-Dienst ist etwas, das Sie ständig im Hintergrund ausführen möchten.
Einige Vorteile eines Windows-Dienstes bestehen darin, dass er ausgeführt wird, unabhängig davon, welcher Benutzer angemeldet ist (oder auch wenn keine Benutzer angemeldet sind), und dass er so eingestellt werden kann, dass er ausgeführt wird, sobald der Computer hochfährt System wird neu gestartet.
Ich habe normalerweise Dienste verwendet, wenn ich etwas wie einen Ordner oder einen E-Mail-Posteingang überwachen muss.
quelle
Da Sie Ihrer Frage den Hinweis zu praktischen Beispielen hinzugefügt haben, gebe ich Ihnen einige Beispiele für Dienste, die ich für Unternehmensanwendungen geschrieben habe (Sie sagen nicht, ob Sie ein Programmierer für Unternehmensanwendungen sind, aber ich vermute, dass die meisten C # VS2010-Programmierer dies sind). . Ich denke, Sie suchen nach einer Idee, was Entwickler, die nicht für Microsoft arbeiten, schreiben könnten.
Ein Heartbeat-Überwachungsdienst, der prüft, ob noch andere Programme ausgeführt werden (dies hat möglicherweise auch als geplante Aufgabe funktioniert, wurde jedoch als Dienst implementiert).
Ein Berichterstellungsdienst, der die Warteschlangen von Berichtsanforderungen abarbeitete, die Berichte ausführte und an verschiedene Drucker sendete, je nachdem, welcher Drucker ausgelastet war. Dies hat dazu beigetragen, eine Menge Arbeit von einer Legacy-Anwendung zu entfernen und den ausgeführten Bericht für mehrere kostengünstige Boxen freizugeben, auf denen der Dienst ausgeführt wird.
Es wurde als Dienst implementiert, sodass es kontinuierlich ausgeführt, beim Neustart automatisch gestartet und über die standardmäßige Windows-Dienstschnittstelle gestartet, gestoppt, angehalten usw. werden konnte Initiieren des Abrufs von Daten aus anderen Programmen oder einer persistenten Quelle (Warteschlange, Datei, Datenbank), anstatt dass andere Programme sie aufrufen können (Socket, Pipe).
Der Serverteil einer Client / Server-Anwendung wurde ebenfalls als Dienst implementiert, sodass er bei einem Neustart usw. neu gestartet wurde. Es gab ein anderes Projekt mit einer EXE-Datei, in dem dasselbe Programm ausgeführt wurde, jedoch nicht als Dienst, um die Ausführung zu vereinfachen Debug auf Entwicklungsmaschinen.
Ich hoffe das hilft. Bei den anderen Antworten handelt es sich jedoch um allgemeinere Antworten, insbesondere um die Idee, dass geplante Aufgaben für die meisten Zwecke wahrscheinlich einfacher zu schreiben und zu verwalten sind.
quelle
Es gibt viele praktische Verwendungen für einen Dienst. Eine praktische Hauptanwendung ist die Interaktion zwischen Benutzeroberfläche und Dienstprogrammen (oder Daemon in Unix), in diesem Fall der Unterschied zwischen einem Client und einem Server. Ein Server empfängt Anforderungen, verarbeitet die Anforderung und sendet normalerweise eine Antwort zurück. Mit anderen Worten, es dient einer Anfrage. Denken Sie an SQLSERVER, IIS oder Telnet. Ein Client verwendet normalerweise einen Server, indem er Anforderungen an den Server sendet und dann die Antwort anzeigt oder verarbeitet. dh eine Dateneingabeanwendung, eine Webanwendung ... Der Server wird fast immer als Dienst in Windows (oder als Dämon in Unix) installiert, und der Client ist normalerweise nur eine normale App mit einer GUI. Es gibt viel komplexere Verwendungen eines Dienstes, aber diese werden Sie wahrscheinlich am häufigsten verwenden.
Zum Beispiel: Ich arbeite gerade an einem SIP / H323-Videoserver. Es empfängt Anforderungen von einer Anwendung mit einem SDK, das ich geschrieben habe, verarbeitet sie und antwortet zurück. Die Videoserveranwendung wird als Daemon auf einem eingebetteten Linux-Computer installiert (dies wäre ein Dienst auf einem eingebetteten Windows-Computer, aber wer Windows trotzdem zum Einbetten verwendet), und jede Anwendung, die das SDK verwendet, wird als Client betrachtet.
Natürlich könnten Sie solche Anwendungen schreiben und sie nicht zu einem Dienst machen. Sie können sie auch nach dem Start von Windows starten und im Hintergrund ausführen lassen. Es sind jedoch mehrere Registrierungseinträge und einige Eingriffe in den Code erforderlich. Die Verwendung der API ist viel einfacher als in .NET. Microsoft hat dies auf der anderen Seite durch das Erstellen von Diensten und deren Registrierung beim Betriebssystem erheblich vereinfacht. Die Implementierung ist wesentlich einfacher als die manuelle.
quelle
Beispiele für Kandidatenprogramme:
Systeme, die Ressourcen / andere Anwendungen überwachen und Berichte senden müssen (Benutzeraktivität, bestimmte Arten des Dateiverkehrs, Benachrichtigungen über das Fehlverhalten von Anwendungen)
Systeme, die Dienste für andere lokale Anwendungen anbieten (Übersetzungen, Dateikonvertierung, systemübergreifendes Messaging)
Antiviren Software.
Ich denke, das sind die großen Beispiele, die mit geplanten Aufgaben nicht einfach gemacht werden können.
quelle
Meine Lieblingsbeispiele für die Nutzung von Diensten:
quelle
Hier ist ein Beispiel für die Verwendung des Servicekonzepts mit echtem Code (siehe unten).
Es wird ein Service-Bus konfiguriert, der eine Warteschlange belegt und Nachrichten von Webservern und Client-GUIs abhört.
Wenn es die Nachrichten empfängt, führt es die von der Domäne garantierte Logik aus, speichert die Ereignisse auf der Festplatte und veröffentlicht diese Ereignisse im Nachrichtenbroker.
Die meisten größeren Anwendungen, die lose miteinander verbunden sind, implementieren eine Art "Worker" -Architektur wie die folgende.
Das Documently-Projekt ist ein Beispielprojekt, mit dem Sie verteilte Architekturen erlernen können. Sie können mir direkt im Projekt Fragen stellen oder eine Funktion implementieren, um daraus zu lernen, und dann eine Pull-Anfrage senden (und Codekommentare abrufen).
https://github.com/haf/Documently/blob/master/src/Documently.Domain.Service/Program.cs :
quelle
Vor einiger Zeit hat mein Team hier in Brasilien drei Windows-Services für eine Bank implementiert:
Schnittstelle zwischen Systemen: Wir hatten eine Front-Office-Anwendung, die für die Buchung von Geschäften an der Börse verantwortlich war, und eine Back-Office-Anwendung, die für die Abrechnung und Berechnung der Handelsgebühren verantwortlich war. Anfänglich wurde die systemübergreifende Kommunikation direkt auf SQL Server durchgeführt, aber zu viele Sperr- und Aufbewahrungsprobleme führten dazu, dass das System unter einer schlechten Leistung litt. Es wurde ein Service implementiert, der sowohl eine Verbindung mit der Front- als auch mit der Back-Datenbank herstellt und das richtige Lesen / Schreiben mit einer Art Aufbewahrungsstrategie ausführt habe eine Masseneinfügung durchgeführt, die 40x schneller war als die ursprüngliche Lösung, und viele der beteiligten Tabellen für eine lange Zeit nicht gesperrt hat).
Message Queue: Zusammen mit der vorherigen Lösung haben wir einen benutzerdefinierten Message Queue-Handler geschrieben, sodass mehrere Stapelverarbeitungsprozeduren asynchron ausgeführt werden können. Dies wurde sowohl in MSMQ als auch in IBM-MQSeries integriert.
Zentralisierung von Unternehmensdiensten: Mehrere Benutzeranwendungen benötigten beispielsweise gemeinsame Daten als Aktienkurse. Daher haben wir einen benutzerdefinierten Dienst geschrieben, der für den Empfang von "Preisanfragen" und das Zurücksenden der Preisinformationen zuständig ist.
Einer der Aspekte, die uns dazu veranlassten, Dienste anstelle von "Robotern" zu schreiben, ist, dass Dienste als ein bestimmter Benutzer ausgeführt werden können (wie bereits in diesem Thread erwähnt) und automatisch beim Hochfahren des Computers initiiert werden können.
Dienste benötigen zum Ausführen auch keinen Desktop- oder Fensterverwaltungsdienst. Sie können im Hintergrund ausgeführt werden (nun, sie müssen im Hintergrund ausgeführt werden).
Und wenn Sie wie einige Kollegen von mir sind, die keine Benutzeroberflächen schreiben möchten, stellen Dienste große technologische Herausforderungen dar, da sie in der Regel nicht ausfallen dürfen. Es macht also sehr viel Spaß, einen Service zu schreiben. :)
quelle
Wenn Sie eine Windows-Desktopanwendung entwerfen, die als Standardbenutzer ausgeführt werden muss, aber manchmal eine Aufgabe ausführen muss, für die Administratorrechte erforderlich sind, können Sie einen Dienst verwenden.
Ihr Installationsprogramm installiert den Dienst mit den erforderlichen Berechtigungen. Ihre Desktopanwendung ruft den Dienst auf, wenn eine Aufgabe mit Administratorrechten ausgeführt werden muss.
Dieser Ansatz hat Auswirkungen auf die Sicherheit, die über den Rahmen dieser Antwort hinausgehen.
quelle
Für Programmierer ist der Hauptgrund für die Nutzung des Dienstes:
Alles, was Sie schreiben, was den obigen Anforderungen entsprechen muss, muss als Windows-Dienst ausgeführt werden.
quelle
Der nützlichste Dienst, den ich aus der Sicht des
Endbenutzers geschrieben habe: * Der Benutzer druckte UGLY-Rechnungen auf einem Nadeldrucker mit RAW-Druckertreiber.
* Der Benutzer wollte eine PRETTY-Rechnung mit Logo und glatten Linien.
* Kein Zugriff auf Legacy-Code.
Der Dienst würde:
* Überwachen (mehrerer) Druckerordner auf Druckaufträge.
* Erstellen Sie ein PDF der Rechnung.
* PDF wäre eine schöne leere Rechnung Bild „Unterlage“
der Rohtext * Overlay
* nachschlagen Metadaten, basierend auf Ordner verwendet: (IE Drucker verwendet wird)
dann die Metadaten würde:
* PDF generieren
* und / oder Drucken von PDF
* und / oder die PDF in einen endgültigen Zielordner
* ablegen und / oder die PDF löschen
* und / oder senden Sie die PDF-Rechnung per E-Mail an den Kunden
In diesem Fall werden Ghost-Script-, SPS- und PDF-Engines verarbeitet. Es läuft seit Jahren sehr sauber. Logdateien einbinden !!!
quelle