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
Antwort Antwort
LaCosaMia

Registriert seit: 14. Mai 2015
15 Beiträge
 
#1

AW: HTTP Get XML Datei empfangen

  Alt 14. Mai 2015, 16:36
Kann ich den TIdHttpServer auch in Form eines Web Services nutzen ?
Der Web Service soll hinterher auf einem Apache laufen.

Danke für die Hilfe.
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#2

AW: HTTP Get XML Datei empfangen

  Alt 14. Mai 2015, 16:39
Das ist der Zeitpunkt, wo wir vielleicht noch einmal auf Anfang gehen sollten.

Was sind Deine genauen Anforderungen?
  Mit Zitat antworten Zitat
LaCosaMia

Registriert seit: 14. Mai 2015
15 Beiträge
 
#3

AW: HTTP Get XML Datei empfangen

  Alt 14. Mai 2015, 17:04
Die Datei wird über einen Client, auf welchen ich keinen Einfluß habe, per HTTP POST im Body an den Web Service übertragen.

Nun muss ich mit einem Web Service oder CGI Anwendung diesen UTF8 Stream annehmen und weiterverarbeiten. Mit C# habe ich das ja schon gut hinbekommen, lediglich die Weiterverarbeitung des Stream bzw. der XML Datei ist in C# für mich etwas schwierig.

War das detailiert genug?
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#4

AW: HTTP Get XML Datei empfangen

  Alt 14. Mai 2015, 17:43
[...] War das detailiert genug?
Nein. Nicht mal ansatzweise.

Was verstehst Du unter einem Webservice? https://en.wikipedia.org/wiki/Web_service

Sollst Du eine RESTful-Architektur realisieren, oder doch lieber SOAP-basiert? Oder vielleicht irgendwas selbst gebrautes?

Dann sprichst Du plötzlich von einer Datei. Oben hast Du noch von einem XML im Body gesprochen. Das ist nicht dasselbe.

Und dann kommen auch noch Buzzwords wie Apache, CGI und UTF8-Stream vor, ohne sie näher zu erläutern.

Von fehlenden Plattformangaben z.B. ganz zu schweigen - wobei das daran liegen mag, dass ich nicht mal ansatzweise auf die Idee kommen würde, Apache unter Windows zu betreiben.
  Mit Zitat antworten Zitat
LaCosaMia

Registriert seit: 14. Mai 2015
15 Beiträge
 
#5

AW: HTTP Get XML Datei empfangen

  Alt 14. Mai 2015, 17:57
Ok, fangen wir von vorne an.

- Der Apache läuft auf einem Windowsrechner (ist so, kann ich erstmal nicht auf den IIS umstellen)
- Es wird vom Client eine XML Struktur per POST im Body an den Web Service (reden wir gleich nochmal darüber) als UTF8-Stream geschickt.
- In C# habe ich den Stream angenommen und wieder als XML File abgespeichert.
- Spontan würde ich RESTful sagen, da ich lediglich eine Methode, das Annehmen des Streams brauche.

Besser?
  Mit Zitat antworten Zitat
LaCosaMia

Registriert seit: 14. Mai 2015
15 Beiträge
 
#6

AW: HTTP Get XML Datei empfangen

  Alt 14. Mai 2015, 17:59
Es geht im ersten Schritt lediglich um die Übertragung des Streams.
  Mit Zitat antworten Zitat
vagtler

Registriert seit: 9. Jul 2010
Ort: Köln
667 Beiträge
 
Delphi 2010 Professional
 
#7

AW: HTTP Get XML Datei empfangen

  Alt 14. Mai 2015, 18:30
Welche Rolle spielt der Apache? Wofür brauchst Du den?

Und welcher Stream soll wohin übertragen werden?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.008 Beiträge
 
Delphi 2009 Professional
 
#8

AW: HTTP Get XML Datei empfangen

  Alt 14. Mai 2015, 20: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
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 02:04 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 by Thomas Breitkreuz