![]() |
Delphi-Version: 2009
IdTCPServer in Dienstanwendung
Hi,
ich habe einen Dienst erstellt indem ein TCP Server aus der INDY (10.2.5, Original von Delphi 2009) Sammlung verwendet werden soll. Im OnCreate des Dienstes soll der Server initialisiert und im OnDestroy wieder deinitialisiert werden. Die Komponente TIdTCPServer habe ich auf ein TDataModule gezogen. Das folgende klappt wunderbar, der Server funktioniert.
Delphi-Quellcode:
procedure TSvcMain.ServiceCreate(Sender: TObject) begin
try DMTCPServer.Start; except //Fehlermeldung end;{try..except} end;
Delphi-Quellcode:
So jetzt kommt es zu dem Teil der nicht mehr klappt. Es wird eine Exception ausgelöst "Zugriffsverletztung bei Adresse ... in Modul ... Fehler beim Lesen von Adresse ..."
procedure TDMTCPServer.Start;
begin //init IdTCPServer.Active := False; IdTCPServer.Bindings.Clear; //Einstellungen IdTCPServer.DefaultPort := 60000; //Server starten IdTCPServer.Active := True; end;
Delphi-Quellcode:
Die Exception wird schon beim aufruf von TDMTCPServer.Started ausgelöst.
procedure TSvcMain.ServiceDestroy(Sender: TObject) begin
try if DMTCPServer.Started then DMTCPServer.Stop; except on E: Exception do begin //Fehlermeldung end;{on} end;{try..except} end;
Delphi-Quellcode:
In einer Konsolenanwendung klappt das ganze, ich bekomme dort keine Exception.
function TDMTCPServer.Started: Boolean;
begin result := IdTCPServer.Active; end; procedure TDMTCPServer.Stop; begin //Server beenden IdTCPServer.Active := False; //Verbindungen löschen IdTCPServer.Bindings.Clear; end; Ich verstehe das nicht so ganz, eigentlich müsste das doch funktionieren. |
AW: IdTCPServer in Dienstanwendung
Liste der Anhänge anzeigen (Anzahl: 1)
Probier mal ob der Anhang läuft ...
Console als Admin Projekt1 -install net start TESTSVC >> browser 127.0.0.1:60000 // kommt nichts zurück >> Project1.log ansehen net stop TESTSVC Projekt1 -uninstall |
AW: IdTCPServer in Dienstanwendung
Hi Bummi,
also dein Beispiel Dienst läuft. Der Unterschied zwischen deinem und meinem Dienst liegt darin das ich den TCP Server "starte" und "beende" im OnCreate und OnDestroy und du im OnStart und OnStop. Ich bin gerade etwas verwirrt, warum das bei mir nicht klappt. Zitat:
|
AW: IdTCPServer in Dienstanwendung
So ich habe das ganze jetzt geändert ob das jetzt "Richtig" ist weiß ich nicht.
Im OnCreate des Service wird der TCP Server vorbereitet Im OnStart des Service wird der TCP Server gestartet (Active := True) Im OnStop des Service wird der TCP Server beendet (Active := False) In den Ereignissen OnPause und OnContinue wird der TCP Server ebenfalls beendet bzw. gestartet. Wie gesagt ich habe keinen Schimmer ob das alles korrekt ist, aber es funktioniert. |
AW: IdTCPServer in Dienstanwendung
Hätte ich genauso umgesetzt ...
|
AW: IdTCPServer in Dienstanwendung
Zitat:
Eine Service-Instanz wird auch erzeugt, wenn der Dienst installiert bzw. deinstalliert wird. Im OnStart die Instanz für den Server erzeugen, vorbereiten und Active auf True Im OnPause Active auf False (optional) Im OnContinue Active auf True (optional) Im OnStop die Instanz für den Server freigeben (FreeAndNil) |
AW: IdTCPServer in Dienstanwendung
Zitat:
Ich glaube ich bekomme das jetzt hin, mit eurer Hilfe, danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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