Hi, dank deiner Frage habe ich nochmal weiter rumprobiert. Ich bin bisher davon ausgegangen, dass der Kunde uns die Daten im korrekten Format sendet, da ich sehr wenig Erfahrung mit Webservices habe.
Folgende Erkenntnisse habe ich erlangt:
Wird ein Request im folgenden Format gesendet:
<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="2010-04-14" End="2010-05-10" InvTypeCode="140759" />
<InvCounts><InvCount Count="60" CountType="1" /></InvCounts>
</Inventory>
<Inventory>
<StatusApplicationControl Start="2010-11-10" End="2010-11-11" InvTypeCode="140759" />
<InvCounts><InvCount Count="0" CountType="1" /></InvCounts>
</Inventory>
</Inventories>
</OTA_HotelInvCountNotifRQ>
erhalte ich eine Fehlermeldung "Version Mismatch".
Wird ein Request aber mit Envelope gesendet:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Header></soap:Header>
<soap:Body>
<OTA_HotelInvCountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2009-10-14T17:17:45" Target="Production" Version="1">
...
</OTA_HotelInvCountNotifRQ>
</soap:Body>
</soap:Envelope>
funktioniert der Webservice wunderbar.
Bevor ich dem Kunden jetzt mitteile, dass er doch bitte seinen Request ändern soll, habe ich noch ein paar Verständnisfragen.
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
// Fehlermeldungen anzeigen
error_reporting(E_ALL);
// Hauptklasse
require("class/VacData.class.php");
$vac = new VacData;
// DB-Verbindung herstellen
require($vac->htdocs."/db/opendb.inc.php");
try{
$server = new SoapServer(NULL, array(
"uri" => "http://www.opentravel.org/OTA/2003/05",
"location" => "http://www.url.de/webservices/server.php5"));
//$server->addFunction('OTA_HotelInvCountNotifRQ');
$server->setClass("VacData");
$server->handle();
}
catch (SOAPFault $f) {
print $f->faultstring;
}
?>