Webservice einrichten
Hi,
für einen Kooperationspartner soll ich einen Webservice einrichten, mit dem Daten im XML-Format an den Webservice gesendet werden können. Hier ein Beispiel, wie die Daten ankommen: HTML-Code:
<?xml version="1.0" encoding="UTF-8"?><OTA_HotelInvCountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2009-10-14T17:17:45" Target="Production" Version="1"><POS><Source AgentDutyCode="agentdutycode" AgentSine="agentsine"><RequestorID ID="199976"/></Source></POS><Inventories><Inventory><StatusApplicationControl Start="2009-10-14" End="2009-11-10" InvTypeCode="140759" /><InvCounts><InvCount Count="60" CountType="1" /></InvCounts></Inventory><Inventory><StatusApplicationControl Start="2009-11-10" End="2009-11-11" InvTypeCode="140759" /><InvCounts><InvCount Count="0" CountType="1" /></InvCounts></Inventory><Inventory><StatusApplicationControl Start="2009-11-11" End="2009-11-12" InvTypeCode="140759" /><InvCounts><InvCount Count="60" CountType="1" /></InvCounts></Inventory><Inventory><StatusApplicationControl Start="2009-11-12" End="2009-11-13" InvTypeCode="140759" /><InvCounts><InvCount Count="0" CountType="1" /></InvCounts></Inventory><Inventory><StatusApplicationControl Start="2009-11-13" End="2010-10-15" InvTypeCode="140759" /><InvCounts><InvCount Count="60" CountType="1" /></InvCounts></Inventory></Inventories></OTA_HotelInvCountNotifRQ> Zusätzlich weiß ich, dass ich die XML-Daten mittels curl versenden und mit Simple-XML auswerten kann. Aber soweit bin ich noch gar nicht. Ich möchte den Webservice natürlich vorher testen, nur weiß ich nicht, wo ich anfangen soll. Ich habe bereits ein wenig rumprobiert. PHP bietet z. B. einige nützliche Methoden, wie z. B. '__getLastRequest'. Nur erhalte ich bei den Methoden stets eine leere Ausgabe, keine Fehlermeldung oder sonstwas. Damit kann ich nichts anfangen und ich komme an der Stelle nicht weiter. Das ist ziemlich frustrierend, wenn man nicht weiß, was man falsch macht. Daher stellen sich mir auch einige Fragen: - Benötige ich zwingend eine WSDL-Datei? - Wie erhalte ich eine verwertbare Ausgabe (Fehlermeldung oder sonst was, Hauptsache irgendwas) der PHP-SOAP-Methoden? - Da im XML-Request kein Funktionsname angegeben ist, wie werte ich den XML-Request überhaupt aus bzw. wie übergebe ich den XML-Code an eine Funktion, die den XML-Code auswertet? Danke und Gruß |
AW: Webservice einrichten
Zitat:
Somit benötigst du diese Dateien, wenn du dem Tutoriel folgen willst bzw. wenn du die gleiche Grundlage in deinem Script verwenden willst. Zitat:
Zu guter Letzt schreibe ich noch was zur Fehlerhandhabung. Nehmen wir mal ein Beispiel. Du stellst ein Skript als SOAP-Server zu Verfüguung, welches in einer Datenbank nach Artikeln sucht. Nun gibt der Client aber keine Artikelbeschreibung an, wonach es dir nicht möglich ist, diese Abfrage durchzuführen. Dafür stellt SOAP extra ein Errorhandler bereit, wo man Errorcodes zurück an den Clienten schicken kann. Bauen wir es am Besten gleich mal in unseren TestServer ein: Ab Punkt 9 erklärt der Autor dir wie es geht. Zitat:
An dieser Stelle beschreibt er, wie der Request ausgewertet wird. Lt. Tutoriel erfolgt hier ein Funktionsaufruf. |
AW: Webservice einrichten
Hi, erst mal danke für die Antwort.
Ich habe das Tutorial nochmal durchgearbeitet und mir die WSDL-Datei erstellt. Funktioniert soweit ganz gut. Dabei ist mir folgendes aufgefallen: Wenn in der WSDL der Pfad zum Webservice angegeben wird Code:
<service name='TestServerService'> PHP-Code:
PHP-Code:
Wie ich mittlerweile herausgefunden habe, muss man das Resultat der PHP-SOAP-Methoden, wie z. B. __getLastRequest, in <xmp></xmp> einfassen, damit man eine Ausgabe im Browser erhält. Nun aber weiter mit meinem Webservice. Ich möchte den im Threadstart genannten XML-Code an den zukünftigen Webservice senden. Die noch nicht für den Webservice angepasste WSDL-Datei ist unter http://www.nordseetraum.de/webservic...elService.wsdl zu finden. Der Webservice hat derzeit noch folgenden Aufbau: PHP-Code:
PHP-Code:
HTML-Code:
Ergebnis: SOAP-ENV:VersionMismatchWrong Version HTML-Code:
<?xml version="1.0" encoding="UTF-8"?> Ich würde als nächstes erst mal die WSDL-Datei anpassen wollen, damit ich den Fehler "VersionMismatchWrong Version" wegbekomme. Wo kann da die Ursache liegen? Ich habe gelesen, dass es am falschen Namespace liegen kann oder am fehlenden Root-Element "ENVELOPE". Wie und wo muss ich das in der WSDL-Datei angeben? |
AW: Webservice einrichten
Hi, ich bin mittlerweile schon mal einen Schritt weiter. Da ich sehr wenig Erfahrung mit Webservices habe, bin ich bisher davon ausgegangen, dass der Kunde uns die Daten im korrekten Format sendet.
Folgende Erkenntnisse habe ich erlangt: Wird ein Request im folgenden Format gesendet: HTML-Code:
<OTA_HotelInvCountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2009-10-14T17:17:45" Target="Production" Version="1"> Wird ein Request aber mit Envelope gesendet: HTML-Code:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> Bevor ich dem Kunden jetzt mitteile, dass er doch bitte seinen Request ändern soll, habe ich noch ein paar Fragen. Ist es irgendwie anders möglich den Request ohne Envelope zu verwenden, so dass der Kunde seinen Request nicht ändern muss? Gibt es vielleicht eine Möglichkeit den Server entsprechend einzustellen? Oder gibt es vielleicht eine andere Technologie? XML-RPC vielleicht (hab ich nebenbei von gelesen)? Mein Server sieht wie folgt aus: PHP-Code:
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:37:05 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.