Hallo MrAbbey,
ich hab da mal eine Frage.
Ich beschäftige mich zurzeit auch mit dem Abrufen eines Webservices.
Allerdings bekomme ich den Aufbau der Abfrage nicht hin (Antwort des Webservice-Servers sagt immer, dass kein Value übergeben wurde).
Kann ich mir nach Erstellung den Inhalt des
locautSoapSerializer oder des locautSoapHttpConnector
irgendwie als reines XML File anzeigen lassen um so zu kontrollieren, ob meine Anfrage die geforderte XML Struktur enthält?
Was ich möchte ist eigentlich ganz einfach:
Ich möchte zum Test die Funktion "Translate" von webservicex.net aus NAV aufrufen. Der Soap-Request soll lt. webservicex.net so aussehen:
- Code:
POST /TranslateService.asmx HTTP/1.1
Host: www.webservicex.net
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.webservicex.net/Translate"
<?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>
<Translate xmlns="http://www.webservicex.net">
<LanguageMode>EnglishTOGerman</LanguageMode>
<Text>string</Text>
</Translate>
</soap:Body>
</soap:Envelope>
Mein code sieht folgendermaßen aus:
- Code:
CREATE(locautSoapHttpConnector);
locautSoapHttpConnector.Property('EndPointURL', http://www.webservicex.net/TranslateService.asmx');
locautSoapHttpConnector.Connect;
locautSoapHttpConnector.Property('AuthUser', 'User');
locautSoapHttpConnector.Property('AuthPassword', 'Password');
locautSoapHttpConnector.Property('Timeout', 5 * 1000);
locautSoapHttpConnector.Property('SoapAction','http://www.webservicex.net/Translate');
locautSoapHttpConnector.BeginMessage;
CREATE(locautSoapSerializer);
locautSoapSerializer.Init(locautSoapHttpConnector.InputStream);
locautSoapSerializer.startEnvelope('SOAP','STANDARD');
locautSoapSerializer.startBody;
locautSoapSerializer.startElement('Translate');
locautSoapSerializer.startElement('LanguageMode');
locautSoapSerializer.writeString('EnglishTOGerman');
locautSoapSerializer.endElement;
locautSoapSerializer.startElement('Text');
locautSoapSerializer.writeString('master');
locautSoapSerializer.endElement;
locautSoapSerializer.endElement;
locautSoapSerializer.endBody;
locautSoapSerializer.endEnvelope;
locautSoapHttpConnector.EndMessage;
CREATE(locautXmlDoc);
locautXmlDoc.load(locautSoapHttpConnector.OutputStream);
locautXmlDoc.save('c:\temp1.xml');
Als Antwort erhalte ich von webservicex.net:
- Code:
<?xml version="1.0" encoding="utf-8" ?>
- <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <soap:Body>
- <TranslateResponse xmlns="http://www.webservicex.net">
<TranslateResult>Value cannot be null. Parameter name: translationmode</TranslateResult>
</TranslateResponse>
</soap:Body>
</soap:Envelope>
Was mache ich falsch? Sehe wohl den Wald vor lauter Bäumen nicht, oder ???