AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Dienst/Service oder VCL-Anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Dienst/Service oder VCL-Anwendung

Ein Thema von Jens Hartmann · begonnen am 23. Dez 2010 · letzter Beitrag vom 25. Dez 2010
Antwort Antwort
ele

Registriert seit: 18. Feb 2009
129 Beiträge
 
Delphi 2010 Professional
 
#1

AW: Dienst/Service oder VCL-Anwendung

  Alt 23. Dez 2010, 21:51
Ich schreibe meine Server-Anwendungen immer als Service mit Webinterface. Über das Webinterface steuert, überwacht und konfiguriert man den Service.

Die Komplette Logik ist in einer Klasse abgelegt die etwa so aussieht:

Delphi-Quellcode:
  TServiceState = (ssStopped, ssRunning, ssPaused);
  TServiceClass = class( TObject )
  protected
    FState: TServiceState;
    FIsService: Boolean;
    function GetServiceName(): String; virtual;
    function GetDisplayName(): String; virtual;
    function GetDescription(): String; virtual;
  public
    constructor Create(); virtual;
    destructor Destroy(); override;

    procedure Start(); virtual;
    procedure Stop(); virtual;
    procedure Pause(); virtual;
    procedure Resume(); virtual;
    procedure Restart(); virtual;
    procedure Execute(); virtual;

    property State: TServiceState read FState;
    property ServiceName: String read GetServiceName;
    property DisplayName: String read GetDisplayName;
    property Description: String read GetDescription;
    property IsService: Boolean read FIsService;
  end;
(In der Realität ist das ganze etwas komplizierter, ich kann aber meine Vorlage nicht einfach so open source stellen. Aber es geht hier ums Prinzip.)

Dann habe ich zwei Projekte - ein VCL Projekt und ein Service - die jeweils die Funktionen in der oben genannten Klasse aufrufen. Somit Programmiert man die Logik nur einmal, kann sie im VCL Projekt testen und debuggen und hat dann für den produktiven Betrieb einen Service.

Das macht das Entwickeln eines Services wesentlich einfacher. Allerdings muss man aufpassen, da ein Service eben nicht ganz unter den selben Bedingungen läuft wie eine übliche Windows Applikation. Das betrifft z.B. das aktuelle Verzeichnis, Window Handles (versuch mal Window Messages in einem Service zu behandeln) und z.B. darf man nicht vergessen CoInitialize() aufzurufen wenn man COM benutzen will (direkt oder indirekt). Auch läuft ein Dienst in der Regel unter dem System Benutzer, was andere Zugriffsrechte zur Folge hat. Z.B sind Netzlaufwerke die man eingerichtet hat unter dem Systembenutzer nicht zugänglich.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Dienst/Service oder VCL-Anwendung

  Alt 25. Dez 2010, 10:47
Hallo und schöne 1. Weihnachten zusammen.

Zitat von Sir Rufo:
Ich habe hier ein Tutorial gefunden (englisch)
http://www.tolderlund.eu/delphi/service/service.htm
Danke erstmal, trotz englisch bin ich recht gut damit zurecht gekommen. Also ich denke, der Lösungsansatz "Dienst mit Threads" scheint mir am besten für mein Programm geeignet. Allerdings habe ich ein kleines Verständnisproblem. Ich habe jetzt mal meine ersten Threads geschrieben. Und auch dazu ein gutes Tutorial gelesen.
http://www.michael-puff.de/Programmi...mit_Delphi.pdf

Ich würde jetzt gerne eine VCL-Anwendung mit den entsprechenden Threads schreiben und anschließend den Dienst erstellen. Hierzu, so habe ich das zumindestens Verstanden, muss ich natürlich die gesamten Funktionen die ich benötige in die Threads auslagern. Das würde für mich bedeuten, ich müsste die Komponente CPortLib "ComPort" zur Laufzeit in dem Thread erzeugen.

Geht sowas, und wie macht man sowas. Findet man dazu was im Netz. Viel muss der Thread ja nicht machen, er muss lediglich den entsprechende ComPort erzeugen, diesen öffnen und anschließende Daten von der Com-Schnittstelle lesen. Zusätzlich müssten dies in eine Datenbank geschrieben werden. Also brauchte ich wahrscheinlich auch eine TZConnection und Query, die ich zur Laufzeit erzeuge.

Hmmm...

Oder legt man die Komponenten einfach auf die VCL-Form und in den Dienst und grieft über den Thread darauf zu. Das würde ja bedeuten, das die Kompos in der VCL-Anwendung und im Dienst den selben Namen haben müssten.

Mann ist das alles kompliziert. Ich hoffe ich konnte mein Vorhaben einigermaßen beschreiben.

Also nochmal schöne Weihnachten und Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Dienst/Service oder VCL-Anwendung

  Alt 25. Dez 2010, 19:35
Die üblichen "Portkomponenten" arbeiten intern ohnehin schon gethreaded und liefern die Daten in einem Synchronized-Paket.
Vielleicht machst Du es Dir etwas einfacher wenn Du Komponenten und Logik in einem Datenmodul ablegst, dieses kannst Du auch in einem Dienst und/oder einer Desktopanwendung verwenden.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Dienst/Service oder VCL-Anwendung

  Alt 25. Dez 2010, 19:58
Zitat von Bummi:
Die üblichen "Portkomponenten" arbeiten intern ohnehin schon gethreaded und liefern die Daten in einem Synchronized-Paket.
Vielleicht machst Du es Dir etwas einfacher wenn Du Komponenten und Logik in einem Datenmodul ablegst, dieses kannst Du auch in einem Dienst und/oder einer Desktopanwendung verwenden.
Hört sich logisch an, und damit hätte ich auch keine Problem das zu realisieren. Stellt sich für mich die Frage, welcher der Bessere oder vieleicht anders gesagt sinnvollste Weg ist?

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz