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: Alles auswählen
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: Alles auswählen
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: Alles auswählen
<?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 ???