Frage

Ich habe mehrere verschiedene c # Arbeiter Anwendungen, die verschiedenen kontinuierliche Aufgaben ausführen: E-Mails aus der Warteschlange, den Import neue Aufträge von der Website-Datenbank Aufträgen Datenbank zu senden, so dass Datenbank-Backups und Wiederherstellungen, Laufdatenverarbeitung für OLTP -> OLAP und andere damit zusammenhängende Aufgaben . Zuvor veröffentlichte ich diese als Windows-Dienste, aber derzeit befreie ich sie als reguläre Konsolenanwendungen. Sie sind alle an einer gemeinsamen Aufgabe runner-Framework basierenden I erstellt, und ich bin glücklich damit, aber ich bin nicht sicher, was der beste Weg ist, diese Arten von Anwendungen zu implementieren. Ich mag die Konsolen-Version, weil es schnell und einfach ist, und es ist möglich, schnell Programmaktivität und Ausgabe. Der Nachteil ist, dass der Arbeitnehmer Computer mehrere Bildschirme Konsole laufen hat, und es wird chaotisch. Auf der anderen Seite scheint die Service-Methode zu lange dauern zu implementieren und ich muß Ereignisprotokolle Nachrichten sehen gehen. Was sind einige Erfahrungen / Kommentare zu diesem Thema?

War es hilfreich?

Lösung

Ich mag die Konsole app Ansatz. Ich in der Regel haben sich die Dinge so einrichten, kann ich einen Schalter wie -unattended übergeben, die den Konsolenbildschirm unterdrückt.

Andere Tipps

Windows Service wäre eine gute Wahl sein, es läuft im Hintergrund unabhängig davon, ob Sie aktuelle Sitzung zu schließen, auch können Sie sie konfigurieren, um automatisch zu starten, nachdem Windows neu starten, wenn ein Patches Update auf dem Server ausgeführt wird. Sie können wichtige Nachrichten an die Ereignisanzeige oder Datenbanktabelle anmelden.

Für eine Sache wie diese, der Standard-Weg, es zu tun, ist mit Windows-Diensten. Sie wollen, dass der Dienst im Netzwerk Konto ausgeführt, damit es nicht ein angemeldeten Benutzer erforderlich ist.

Ich habe an etwas vor ein paar Jahren, die ähnliche Probleme hatten. Logischerweise brauchte ich einen Service, aber manchmal musste ich sehen, was los war und in der Regel wollte ich eine Geschichte. So entwickelte ich einen Dienst, der die Arbeit tat, zu jeder Zeit es einzuloggen wollte, rief sie seinen Abonnenten (als Beobachter Muster implementiert).

Der Dienst registriert seine eigene Datenlogger (in eine Datenbank zu schreiben) und während der Laufzeit kann der Benutzer eine GUI ausgeführt, die mit dem Dienst verbunden Remoting ein Live-Hörer werden mit!

Ich werde für Windows-Dienste stimmen. Es wird erhalten eine echte Schmerzen Verwaltung dieser Konsole Anwendungen.

Windows Service-Bereitstellung ist einfach: Nach der ersten Installation, können Sie sie einfach deaktivieren und ein XCOPY tun. Es müssen keine komplizierten Installateure laufen. Es ist nur halb kompliziert das erste Mal, und selbst dann ist es nur

installutil MyApp.exe

Configre die Dienste unter einem Domänenkonto für die beste Sicherheit und einfachste Interop mit anderen Maschinen laufen zu lassen.

Verwenden Sie eine Kombination von Ereignisprotokollen (mit Fehler, Warnung und Informationen) für wichtige Benachrichtigungen und Dump nur die ausführliche Protokollierung in eine Textdatei.

Warum nicht das Beste aus allen Welten und nutzen so etwas wie:
http://topshelf-project.com/

Es ermöglicht Ihnen, Ihr Programm als Befehlszeile oder einem Windows-Dienst ausgeführt werden.

Ich bin mir nicht sicher, ob dies auf Ihre Anwendungen gilt oder nicht, aber wenn ich einige Konsolenanwendungen, die auf Benutzereingaben nicht abhängig sind, oder sie sind die Art von Anwendungen, die nur ihre Arbeit tun und aufhören, ich laufe solche Programme auf einem virtuellen Server, auf diese Weise ich Aufspringen nicht einen Bildschirm sehen, wenn ich arbeite, und virtuelle Server sind einfach zu erstellen und neu zu starten.

Wir nutzen regelmäßig Windows-Dienste wie die Hintergrundprozesse. Ich habe keine Befehlszeilen Anwendungen wie, wie Sie beim Server angemeldet werden müssen, für sie zu laufen. Dienstleistungen laufen im Hintergrund die ganze Zeit (vorausgesetzt, sie sind Auto-Start). Sie sind auch trivial w / das sc.exe Kommandozeilen-Tool zu installieren, die in den Fenstern sind. Ich mag es besser als die aufblasen-ware, die installutil.exe ist. Natürlich installutil tut mehr, aber brauche ich nicht, was es tut. Ich will nur meinen Dienst registrieren.

Wir haben auch eine Infrastruktur geschaffen, wo wir einen generischer Dienst haben .exe, dass Lasten .DLLs auf einer Interface-Definition basierte, so dass ein neuen „Service“ das Hinzufügen so einfach in einer neuen DLL als Abwurf und einen Neustart die Service-Host.

Allerdings begannen wir wegziehen von Dienstleistungen. Das Problem, das wir mit ihnen ist, dass sie die DLLs einsperren (aus offensichtlichen Gründen), so es ist ein Schmerz, sie zu aktualisieren. Wir müssen aufhören, zu aktualisieren und dann neu starten. Nicht schwer, aber zusätzliche Schritte. Statt sich bewegen wir auf spezielle „Seiten“ in unserer asp.net Anwendungen, die die tatsächlichen Hintergrundjobs müssen wir getan laufen. Es gibt noch ein Dienst, aber alle sie es die asp.net Seiten nicht aufrufen, so dass es keine unserer DLLs nicht einsperren. Dann können wir den DLLs in der asp.net ist und normale asp.net Regeln für App-Domain Neustart Tritt in ersetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top