SOAP und HTTP-Get

Vom Front-End bis SOAP.

Moderator: Moderatoren

Antworten
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

SOAP und HTTP-Get

Beitrag von Rolf »

Hi

Ich hab leider keine Ahnung von der Materie, darum nun ein paar Fragen.
Es gibt da so ein spezielles Gerät was im Netz (TCP/IP) hängt. Das ist denke ich eine Art Server. Für diesen Server gibt es eine Schnittstellenbeschreibung mit einer Reihe von SOAP-Aufrufen und Rückgaben. Unser Anwendung soll mit dem Server interagieren.

Folgende Fragen:

(1)
Unsere Anwendung soll beim Start mit HTTP-Get eine vordefinierte URL aufrufen!

Code: Alles auswählen

GET http://host:port/Datei.txt
Wie geht das?

(2)
Dann soll vom Server eine Antwortdatei zurückkommen, in der alle unterstützten Funktionen des Servers vermerkt sind.
Wo liegt die?

(3)
Der genante Fall mit HTTP-Get ist im Grunde die Ausnahme. Im allgemeinen soll mit SOAP gearbeitet werden. Das funktioniert ja irgendwie mit Request und Response. Ist das wie oben das ich eine Datei (Request) an den Server schicke und dann eine Andere (Response) zurückbekomme?

(4)
Was braucht man für eine SOAP-Testumgebung mit XBase?

Grüße Rolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

zuerst das einfache :wink: die Datei die du holen willst.
Dafür brauchst du eine Internetbibliothek z.B. die ASINET (der Prof. Sub) oder XB2.NET von Boris oder von Marshalsoft. Diese sollte dann auch noch SOAP können, denn das brauchst du ja auch noch.
Auf der Alaska Website gibt es die Links und demos dazu unter Technologieparter oder so.

Also auf deinem WEB Server (nix anderes ist das) liegt eine Datei die du holen sollst. Mit der Asinet Funktion (ach ja LoadFromURL gibt es auch noch von Phil) LoadFromUrl() lädst du die Datei:

Code: Alles auswählen

cFileTxt  :=  LoadFromUrl("http://192.168.222.235:80/Datei.txt")
if cFileTxt=NIL
   * Fehler
else
   nH := fcreate("c:\...\file.txt")
   fwrite(nH,cFileTxt)
   fclose(nH)
endif
jetzt mal ohne Fehlerbehandlung ...
Mit SOAP würde ich mal bei wikipedia nachsehen ...

da steht was http://de.wikipedia.org/wiki/SOAP

Wenn ich es recht verstehe versendest du SOAP Nachrichten (XML Dateien mit speziellem Aufbau) an den WEB oder FTP Server, wobei WEB Server wahrscheinlicher ist, da FTP oft von der Firewall blockiert wird.
Dort muss das interpretiert und beantwortet werden.
Gruß
Hubert
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hallo
brandelh hat geschrieben:Also auf deinem WEB Server (nix anderes ist das) liegt eine Datei die du holen sollst.
Da hätte ich eigentlich auch drauf kommen können. :idea:
brandelh hat geschrieben: oder XB2.NET von Boris oder von Marshalsoft
Das versteh ich nicht. Kann man XB2.NET von zwei Quellen beziehen?

Diese Seite ist am besten dokumentiert. Ist das die richtige?
http://www.sqlexpress.net/menu.htm

Grüße Rolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

ja die Seite dürfte wohl dem entsprechen was du brauchst.
Ich selbst habe kein XB2.NET, Martin schwört drauf.
Wobei er - soweit ich weiß - die Serverseite programmiert, du müsstest ja die Clientseite programmieren.

Die anderen Tools haben keine SOAP-Untestützung, sowie ich das sehe.
Viele Links sind auch nicht mehr existent.
Bei der ASINET müsstest du die XML SOAP Geschichten selbst erstellen, kein Hexenwerk aber auch nicht ganz einfach.

www.Marshallsoft.com hat nur eMail (POP3/SMTP) und FTP im Angebot, passt also nicht.
Gruß
Hubert
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Rolf,

du kannst auch Microsofts SOAP-Client über ActiveX nutzen. Der ist ab XP offenbar Teil des Betriebssystems und hat den Vorteil, dass er dir Details wie XML-Kodierung und -Dekodierung abnimmt. In der Alaska-Newsgroup findest du ein Beispiel dafür.

Newsgroup: public.xbase++.activex
Thema: "Simple SOAP Client example"
begonnen von John D. Sauvigne am 21.05.2007.

Viele Grüße,
Günter
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hallo

@Hubert

Zu dem ASINET und LoadFromURL() ergibt sich das Problem das wir leider nur die "Foundation Subscription" haben. Meiner Meinung nach dürfte auch LoadFromURL() nicht ohne ASINET funktionieren, oder?

Laut der Newsgroup von xb2net news://news.xb2.net/xb2net der Artikel "download file via HTTPS & Login" müsste das aber mit xb2.net gehen.

Bei xb2.net gibt es meiner Meinung nach leider keine Demo, sondern es muss gleich gekauft werden. Somit kann ich das ganze nicht testen.

@Günter

Das Beispiel hat gleich geklappt. Da versteht man es erst mal.

Danke
Rolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rolf,
Rolf hat geschrieben:Bei xb2.net gibt es meiner Meinung nach leider keine Demo, sondern es muss gleich gekauft werden. Somit kann ich das ganze nicht testen.
falsch! Einfach herunterladen (entsprechende Instruktionen erhältst Du, wenn Du eine Mail an die XB2.Net-Mailadresse sendest - Hinweise dazu in der von Dir genannten Newsgroup).
Die Testversion entspricht der Vollversion - nur ohne Key beendet sich Dein Programm automatisch nach 60 Minuten Laufzeit...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hallo Martin,

hab es in der newsgroup nicht gefunden, aber wenn man von der Hauptseite auf den Link "Xb2.NET page" (http://www.xb2.net/menu.htm) klickt findet man den Link "Get free demo version (automated email reply)".

Hab da woll nicht lang genug gesucht. :?

Vielen Dank
Rolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rolf,
gerne.
Wenn Du Fragen zu Xb2.NET hast - nur zu! Ich mache jedoch nichts mit Soap - nur HTML und proprietären Filetransfer...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Beitrag von Günter Beyes »

Hallo Rolf,

leider hat Microsoft den Support für den im Beispiel von John D. Sauvigne verwendeten SOAP-Client (MsSoap1.dll in Verbindung mit MsXml3.dll) eingestellt. Als Ersatz empfehlen sie jetzt das .NET-Framework.

Hier gibt es als weitere Alternative einen anderen ActiveX-basierten SOAP-Client (Open Source) mit zahlreichen Beispielen.

Einen HTTP-Debugger, um zu sehen, was über die Leitung geht, findest du hier oder hier.

Viele Grüße
Günter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Rolf hat geschrieben:Zu dem ASINET und LoadFromURL() ergibt sich das Problem das wir leider nur die "Foundation Subscription" haben. Meiner Meinung nach dürfte auch LoadFromURL() nicht ohne ASINET funktionieren, oder?
Hallo Rolf,

Die ASINET enthält die Funktion, bekommt man aber nur mit der Prof. Sub. Soweit ist das richtig, aber von Phil Ide (Adresse unter Links...) gibt es auch eine entsprechende Funktion LoadFromUrl() - oder so ähnlich, die ohne die ASINET funktioniert.

Diese Funktion dient dem Transport der SOAP Nachricht, die man entweder selbst oder über eine Funktion erstellen kann.

XB2.NET enthält halt beides in einem Packet und Boris soll recht hilfsbereit sein, soweit man hört.
Ich selbst habe XB2.NET nicht, aber bin mit SQLExpress von ihm sehr zufrieden.

Bei ActiveX Clients, die nicht automatisch installiert sind, muss man die halt mitinstallieren (registrieren), das spart man sich wenn man über die Betriebssystemfunktionen (Phils Beispiel baut darauf auf) oder Xb2.NET geht.
XB2.NET hat übrigens nichts mit .NET von Microsoft zu tun.
Zuletzt geändert von brandelh am Mi, 27. Jun 2007 13:22, insgesamt 2-mal geändert.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Günter Beyes hat geschrieben: Einen HTTP-Debugger, um zu sehen, was über die Leitung geht, findest du hier oder hier.
Danke Günter,

sowas habe ich schon lange vermisst...
Gruß
Hubert
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Vielen Dank für eure Antworten :)
Die zwei möglichen Wege (Xb2.net oder PocketSOAP) schau ich mir gleich an.

Für die richtige Entwicklung fehlt mir noch eine spezielle Hardware durch die der vorgegebene SOAP-Server des Fremdanbieters erst richtig startet. Die ist aber wahrscheinlich gerade in der Post und müsste die nächsten Tage ankommen.

Ich melde mich wieder wenn es was neues gibt.

Nochmals
Vielen Dank

Grüße Rolf
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

Hallo Hubert

Es geht mir noch mal um LoadFromURL()
Hab damit nun schon experimentiert und funktioniert auch ohne ASINET.

Du hast gesagt.
brandelh hat geschrieben: Diese Funktion dient dem Transport der SOAP Nachricht, die man entweder selbst oder über eine Funktion erstellen kann.
Bedeutet das, das ich einfach eine SOAP-Nachricht(*.XML) erstellen kann und die einfach mit LoadFromURL() an den Server zur Auswertung schicke?

In der Spezifikation zu dem SOAP-Server, sind sehr verschachtele XML-Nachrichten angeführt. Und da weiß ich noch nicht, wie man dies mit Xb2.net umzusetzen kann.

Da denke ich, wäre es fast einfacher ich bau die XML selbst zusammen und schick sie selbst raus, oder?

Grüße Rolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SOAP und HTTP-Get

Beitrag von brandelh »

ist schon ewig her, aber vielleicht gibt es ja neues ?

Ich habe mal versucht mit LoadFromUrl() Währungskurse abzufragen und die XML / SOAP Datei an den Server gesandt.
Dabei erhalte ich die beiliegende HTML Antwort ... Sicherheitswahrnung ...

Ich frage mich ist die von meinem lokalen Rechner oder vom Server ?
Hier zunächst mein Code

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "Inkey.ch"

#pragma Library( "Asinet10.lib" )

procedure main()
   local cUrl := "http://www.webserviceX.NET"
   local cSoap, cFrom, cTo, nLen, cLen1,cLen2, cLenVar, nLenVar
   local cReturn

cFrom   := "USD"
cTo     := "AUD"
cLenVar := "{#LEN#}"
nLenVar := len(cLenVar)

* AFA or ALL or DZD or ARS or AWG or AUD or BSD or BHD or BDT or BBD or BZD or BMD or BTN or BOB or BWP or BRL or GBP or BND or BIF or XOF or XAF or KHR or CAD or CVE or KYD or CLP or CNY or COP or KMF or CRC or HRK or CUP or CYP or CZK or DKK or DJF or DOP or XCD or EGP or SVC or EEK or ETB or EUR or FKP or GMD or GHC or GIP or XAU or GTQ or GNF or GYD or HTG or HNL or HKD or HUF or ISK or INR or IDR or IQD or ILS or JMD or JPY or JOD or KZT or KES or KRW or KWD or LAK or LVL or LBP or LSL or LRD or LYD or LTL or MOP or MKD or MGF or MWK or MYR or MVR or MTL or MRO or MUR or MXN or MDL or MNT or MAD or MZM or MMK or NAD or NPR or ANG or NZD or NIO or NGN or KPW or NOK or OMR or XPF or PKR or XPD or PAB or PGK or PYG or PEN or PHP or XPT or PLN or QAR or ROL or RUB or WST or STD or SAR or SCR or SLL or XAG or SGD or SKK or SIT or SBD or SOS or ZAR or LKR or SHP or SDD or SRG or SZL or SEK or CHF or SYP or TWD or TZS or THB or TOP or TTD or TND or TRL or USD or AED or UGX or UAH or UYU or VUV or VEB or VND or YER or YUM or ZMK or ZWD or TRY

TEXT INTO cSoap WRAP
POST /CurrencyConvertor.asmx HTTP/1.1
Host: www.webservicex.net
Content-Type: text/xml; charset=utf-8
Content-Length: {#LEN#}
SOAPAction: "http://www.webserviceX.NET/ConversionRate"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ConversionRate xmlns="http://www.webserviceX.NET/">
      <FromCurrency>{#FROM#}</FromCurrency>
      <ToCurrency>{#TO#}</ToCurrency>
    </ConversionRate>
  </soap:Body>
</soap:Envelope>
ENDTEXT

cSoap := StrTran(cSoap,"{#FROM#}",cFrom)
cSoap := StrTran(cSoap,"{#TO#}",cTo)
nLen  := len(cSoap)
cLen1 := alltrim(Str(nLen))
nLen  := nLen-nLenVar+len(cLen1)
cLen2 := alltrim(Str(nLen))
if len(cLen2) > len(cLen1)
   nLen  := nLen-nLenVar+len(cLen2)
   cLen2 := alltrim(Str(nLen))
endif
cSoap := StrTran(cSoap,cLenVar,cLen2)
memowrit("PostFile.txt",cSoap)
? "POST ... ",cFrom, " => " ,cTo
cReturn := LoadFromUrl(cUrl,,,,,"POST", cSoap )
memowrit("logfile.html",cReturn)
? cReturn
   wait
return
die Antwort hänge ich an:
Dateianhänge
logfile.zip
(2.34 KiB) 288-mal heruntergeladen
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SOAP und HTTP-Get

Beitrag von brandelh »

Die Erklärung ist einfach, LoadFromURL() kann alle zugreifbaren Dateien vom Server holen (GET) und FORMULARDATEN übertragen (POST), aber eben KEIN XML File uploaden !

Code: Alles auswählen

Syntax 
LoadFromUrl( <cURL>        , ; 
            [<nPortNumber>], ; 
            [<nProtocol>]  , ; 
            [<cProxyUrl>]  , ; 
            [<acByPass> ]  , ; 
            [<cMethod>]    , ; 
            [<cPostString>]  ) --> cWebContent | NIL

<cPostString>
This parameter is a Cgi encoded String representing the HTML Form to be submitted via the method "POST". 
It can be created with the GetCgiString() function or must be formatted according to Cgi specifications using this pattern: 
   Name1=Value1&Name2=Value2&Name3=Value3
So geht es also nicht !
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SOAP und HTTP-Get

Beitrag von brandelh »

wens interessiert, hier ist eine SOAP etc. Erklärungsseite:

http://www.w3schools.com/webservices/ws_soap_body.asp
Gruß
Hubert
Antworten