AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Service programmieren, wie? Was beachten?
Thema durchsuchen
Ansicht
Themen-Optionen

Service programmieren, wie? Was beachten?

Ein Thema von guidok · begonnen am 2. Okt 2007 · letzter Beitrag vom 15. Feb 2008
Antwort Antwort
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#1

Service programmieren, wie? Was beachten?

  Alt 2. Okt 2007, 15:11
Hallo zusammen,

bevor ich mich nun in eine Arbeit stürze und dann feststellen muss, dass die Mühe für die Katz war, würde ich gerne einige Anregungen von euch versierten Programmierern einholen.

Was ich tun will:

Die Software soll (über eine Treiber-DLL) auf eine S7-Steuerung zugreifen und gewisse Datenbereiche auslesen. Diese gelesenen Daten sollen in eine Datenbank geschrieben werden (vermutlich MySQL oder MSSQL), die derzeit lokal auf dem selben Rechner wie die Software installiert läuft.

Als letzte Aufgabe möchte ich in einer letzten Ausbaustufe noch einen Standalone Webserver (Indy HTTPServer) zur Verfügung stellen, um die Daten über Explorer abrufen zu können.

Warum als Service:

Da die Daten auch erfasst werden sollen, wenn sich noch niemand an den PC angemeldet hat, sehe ich in einer Serviceanwendung die Möglichkeit, so etwas zu realisieren. Läuft der SQL-Server eigentlich auch als Service, fällt mir gerade ein?

Die Funktionalitäten bekomme ich auf jeden Fall so hin, wie oben beschrieben, aber einen Service habe ich noch nie programmiert und keine Ahnung, auf was ich dabei achten muss, bei Programmdesign. z.B. gibt es zu libnodave (S7 Kommunikation) eine Delphi-Komponente, aber kann ich in einem Service alle möglichen Klassen frei verwenden oder gibt es da Einschränkungen? Ebenso sieht es mit der DB aus, da wollte ich auf ADO zurückgreifen, damit habe ich schon erfolgreich gearbeitet.

Ich bitte um Tips, Danke!
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Service programmieren, wie? Was beachten?

  Alt 2. Okt 2007, 15:21
Hallo!

Also, soweit ich das weiß läuft MySQL als Service. Mit LibNoDave funktioniert die S7-Kommunikation ja echt perfekt, aber das weißt du sicher selbst.

Bin auch mal auf Antworten gespannt, ich wollte meine Software auch als Service weiterentwickeln...
Marc
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#3

Re: Service programmieren, wie? Was beachten?

  Alt 2. Okt 2007, 15:38
Hast du bei libnodave die NoDaveComponent verwendet, oder greifst du direkt auf die DLL zu? Wie schon geschrieben, bin ich mir nicht sicher, ob das mit den Klassen (die von TObject abgeleitet sind) in einem Service so funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Service programmieren, wie? Was beachten?

  Alt 2. Okt 2007, 15:41
Ich hab die NoDaveComponent benutzt, da es mal wieder schnell gehen musste. Leider hatte ich noch nicht die Zeit, mich nur mit der DLL zu beschäftigen.
Marc
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#5

Re: Service programmieren, wie? Was beachten?

  Alt 3. Okt 2007, 17:21
Ok, ich bin gerade am probieren, wie das überhaupt mit einem Service funktioniert und leider geht es schon mal nicht wie ich will.

Delphi-Quellcode:
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;

type
  TTestservice = class(TService)
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceCreate(Sender: TObject);
    procedure ServiceExecute(Sender: TService);
    procedure ServiceDestroy(Sender: TObject);
  private
    { Private-Deklarationen }
    LogFile: TStringList;
  public
    function GetServiceController: TServiceController; override;
    { Public-Deklarationen }
  end;

var
  Testservice: TTestservice;

implementation

{$R *.DFM}

const LogFileName = 'Service_log.txt';

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Testservice.Controller(CtrlCode);
end;

function TTestservice.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TTestservice.ServiceCreate(Sender: TObject);
begin
  LogFile:=TStringList.Create;
end;

procedure TTestservice.ServiceDestroy(Sender: TObject);
begin
  LogFile.Free;
end;

procedure TTestservice.ServiceExecute(Sender: TService);
begin
  while not Terminated do
  begin
    ServiceThread.ProcessRequests(False);
    Sleep(5000);
    LogFile.Add(DateTimeToStr(Now)+' OnExecute');
    LogFile.SaveToFile(LogFileName);
  end;
end;

procedure TTestservice.ServiceStart(Sender: TService; var Started: Boolean);
begin
  LogFile.Add(DateTimeToStr(Now)+' Service gestartet');
  LogFile.SaveToFile(LogFileName);
end;

end.
Es soll eigentlich nur bei alle fünf Sekunden etwas in eine Textdatei geschrieben werden. Den Service habe ich mit "Testservice \install" gestartet und er erscheint auch im Taskmanager (also bei den Prozessen). Anscheinend wird er allerdings nach einiger Zeit wieder beendet. Warum? Und wo ist meine Datei?
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Service programmieren, wie? Was beachten?

  Alt 3. Okt 2007, 17:40
Versuch doch mal [code]testservice /install[code] (also mit einem Slash anstelle des Backslashs).
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#7

Re: Service programmieren, wie? Was beachten?

  Alt 3. Okt 2007, 17:57
Heilige geistige Umnachtung

Jetzt bekomme ich die Meldung "Service erfolgreich installiert".

Ist doch schon mal was und eine Datei wurde auch erstellt.

Danke, das hier auch geholfen wird, wenn die Fehler in der enormen eigenen Dummheit liegen
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#8

Re: Service programmieren, wie? Was beachten?

  Alt 15. Feb 2008, 10:21
Ich habe noch eine Frage zu dem Thema und da der Titel des Thread prinzipiell identisch lauten würde, krame ich jetzt einfach mal meine alte Frage wieder hoch.

Ist es ein gangbarer Weg die Anwendung, die später als Service laufen soll, zunächst ganz "normal" zu programmieren und später die getesteten Funktionen in ein TService zu packen?

Ich würde in dem Fall natürlich darauf achten, das keine Ein- und Ausgaben in Fenstern abgewickelt werden. Der Service soll am Ende "nur" Textdateien auf der Festplatte erzeugen, die anschließend von anderer Software weiterverarbeitet werden.

Problem wäre es höchstens, wie ich später mit angemeldetem User eine gewisse Statusinformation von meinem Service erhalten kann. Konkret geht es ja weiterhin um das oben Beschriebene. Ich habe jetzt am Rande etwas über Sockets gelesen, denkbar?

Dankend,

Guido
  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 19:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz