AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke HTTP Get XML Datei empfangen
Thema durchsuchen
Ansicht
Themen-Optionen

HTTP Get XML Datei empfangen

Ein Thema von LaCosaMia · begonnen am 14. Mai 2015 · letzter Beitrag vom 14. Mai 2015
 
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#29

AW: HTTP Get XML Datei empfangen

  Alt 14. Mai 2015, 19:54
Kann ich den TIdHttpServer auch in Form eines Web Services nutzen ?
Der Web Service soll hinterher auf einem Apache laufen.
Ja, man kann mit TIdHTTPServer auch ohne weiteres einen Web Service bauen. Dazu muss nur eine Methode implementiert werden, in der man auf den Stream des POST Requests zugreifen kann (siehe unten).

Ein TIdHTTPServer ist aber so wie der Apache HTTP Server ein eigenständiger TCP Server. Wenn man ihn mit einem bestehenden Apache verwenden will, dann ist die einfachste Möglichkeit den Apache als Reverse Proxy zu konfigurieren. Der Apache Server leitet dann externe Anfragen an den in Delphi geschriebenen Web Service weiter. Meist genügen dafür ein paar Zeilen in der Apache Konfiguration

Code:
...
ProxyRequests Off
ProxyPass /service http://localhost:8080/service/
ProxyPassReverse /service http://localhost:8080/service/
...
Der Apache kann dann parallel auch andere HTTP Requests bearbeiten, z.B. PHP oder statische Dokumente. Nur die Requests an den Web Service werden an die Delphi Anwendung 'delegiert'.

Die vom Client per POST gesendeten Stream Daten stehen in der PostStream Property des ARequestInfo Parameters des TIdHTTPServer Eventhandler.

Wenn man die Komponente zur Designzeit erzeugt hat und den OnCommandGet EventHandler anklickt, kann man den automatisch erzeugten Sourcecode um die eigene Behandlung ergänzen.

Delphi-Quellcode:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
  ReceivedStream: TStream;
begin
  // weise den Stream meiner temporären Variable zu
  ReceivedStream := ARequestInfo.PostStream;
  // verwende den Stream
  ...
  // Freigeben des Streams ist nicht notwendig, der Stream wird von Indy freigegeben
  // xxxStream.Free;
 
end;
Anstatt den HTTP Server zur Designzeit zu erzeugen kann man ihn auch dynamisch - zur Laufzeit - erstellen. Man benötigt dann nicht mehr die Forms und andere Teile der VCL, was die Web Service Anwendung kleiner macht.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
 


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 17:50 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