AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IdTCPServer in Dienstanwendung

Ein Thema von TUX_der_Pinguin · begonnen am 26. Sep 2012 · letzter Beitrag vom 26. Sep 2012
Antwort Antwort
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#1

IdTCPServer in Dienstanwendung

  Alt 26. Sep 2012, 11:36
Delphi-Version: 2009
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:
procedure TDMTCPServer.Start;
begin
  //init
  IdTCPServer.Active := False;
  IdTCPServer.Bindings.Clear;

  //Einstellungen
  IdTCPServer.DefaultPort := 60000;

  //Server starten
  IdTCPServer.Active := True;
end;
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 ..."
Delphi-Quellcode:
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;
Die Exception wird schon beim aufruf von TDMTCPServer.Started ausgelöst.

Delphi-Quellcode:
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;
In einer Konsolenanwendung klappt das ganze, ich bekomme dort keine Exception.
Ich verstehe das nicht so ganz, eigentlich müsste das doch funktionieren.
  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
 
#2

AW: IdTCPServer in Dienstanwendung

  Alt 26. Sep 2012, 12:30
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
Angehängte Dateien
Dateityp: zip TCP_IP.zip (83,3 KB, 15x aufgerufen)
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
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: IdTCPServer in Dienstanwendung

  Alt 26. Sep 2012, 13:05
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:
2012-09-26 13:48:58.179: GET / HTTP/1.1
2012-09-26 13:48:58.194: Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
2012-09-26 13:48:58.210: Accept-Language: de
2012-09-26 13:48:58.225: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
2012-09-26 13:48:58.585: Accept-Encoding: gzip, deflate
2012-09-26 13:48:58.600: Host: 127.0.0.1:60000
2012-09-26 13:48:58.616: Connection: Keep-Alive
2012-09-26 13:48:58.632:
2012-09-26 13:49:12.944: Not Connected
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: IdTCPServer in Dienstanwendung

  Alt 26. Sep 2012, 13:44
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.
  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
 
#5

AW: IdTCPServer in Dienstanwendung

  Alt 26. Sep 2012, 13:48
Hätte ich genauso umgesetzt ...
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 Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: IdTCPServer in Dienstanwendung

  Alt 26. Sep 2012, 14:11
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.
Kann man zwar so machen und sollte auch keine Probleme ergeben, aber der TCP Server wird auch dann schon vorbereitet, wenn das absolut nicht nötig ist ... und evtl. dadurch sogar zu Fehlern kommen könnte.

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)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: IdTCPServer in Dienstanwendung

  Alt 26. Sep 2012, 14:20
Eine Service-Instanz wird auch erzeugt, wenn der Dienst installiert bzw. deinstalliert wird.
Das war mir auch schon aufgefallen und habe mich darüber gewundert.

Ich glaube ich bekomme das jetzt hin, mit eurer Hilfe, danke.
  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 14:28 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