Calling webservice, but confused about the syntax

livingdoll
Member Posts: 45
Hi everybody,
I have to send an xml message to a webservice called 'SendMessage', that is defined by the following wsdl:
I'm using XMLDom that's filled from a XMLPort to produce the xml. That's working fine. The only thing I'm puzzled about is the SetRequestHeader-lines in the code below. I don't know - based upon the wsdl above - what to put in there... Anyone have an idea? I have difficulties reading the wsdl, that's new for me..
Best regards,
Jesz
I have to send an xml message to a webservice called 'SendMessage', that is defined by the following wsdl:
<?xml version="1.0" encoding="utf-8" ?> - <wsdl:definitions name="Service" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://tempuri.org/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"> - <wsdl:types> - <xsd:schema targetNamespace="http://tempuri.org/Imports"> <xsd:import schemaLocation="http://server.company.nl/NavService/Service.svc?xsd=xsd0" namespace="http://tempuri.org/" /> <xsd:import schemaLocation="http://server.company.nl/NavService/Service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> </xsd:schema> </wsdl:types> - <wsdl:message name="IService_SendMessage_InputMessage"> <wsdl:part name="parameters" element="tns:SendMessage" /> </wsdl:message> - <wsdl:message name="IService_SendMessageToQueue_OutputMessage"> <wsdl:part name="parameters" element="tns:SendMessageResponse" /> </wsdl:message> - <wsdl:portType name="IService"> - <wsdl:operation name="SendMessage"> <wsdl:input wsaw:Action="http://tempuri.org/IService/SendMessage" message="tns:IService_SendMessage_InputMessage" /> <wsdl:output wsaw:Action="http://tempuri.org/IService/SendMessageResponse" message="tns:IService_SendMessage_OutputMessage" /> </wsdl:operation> </wsdl:portType> - <wsdl:binding name="BasicHttpBinding_IService" type="tns:IService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> - <wsdl:operation name="SendMessage"> <soap:operation soapAction="http://tempuri.org/IService/SendMessage" style="document" /> - <wsdl:input> <soap:body use="literal" /> </wsdl:input> - <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:service name="Service"> - <wsdl:port name="BasicHttpBinding_IService" binding="tns:BasicHttpBinding_IService"> <soap:address location="http://server.company.nl/NavService/Service.svc" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
I'm using XMLDom that's filled from a XMLPort to produce the xml. That's working fine. The only thing I'm puzzled about is the SetRequestHeader-lines in the code below. I don't know - based upon the wsdl above - what to put in there... Anyone have an idea? I have difficulties reading the wsdl, that's new for me..
IF ISCLEAR(XMLDoc) THEN CREATE(XMLDoc); XMLDoc.load(Instr); IF ISCLEAR(XMLHttpConn) THEN CREATE(XMLHttpConn); XMLHttpConn.setRequestHeader('Host','?????'); XMLHttpConn.setRequestHeader('SOAPAction','?????'); XMLHttpConn.setRequestHeader('Content-Type','text/xml'); XMLHttpConn.send(XMLDoc); XMLHttpConn.waitForResponse(1000); TxtResponse := FORMAT(XMLHttpConn.status);
Best regards,
Jesz
0
Comments
-
Hello Jes
What You need to paste the xml file and not copy and paste what IE is rendering. To do that. Save WSDL as xml file and then open it in Notepad and paste the code.
We can then help you with the code on how to communicate with web service.
Could you also post the address for WSDL?0 -
Hi Ara3n,
Thanks for your reply. The WSDL is only addressable on our intranet, so posting the url to it won't be of any use I'm afraid.
I'm pretty new to webservices, so I hope I followed your directions correctly:<?xml version="1.0" encoding="utf-8"?><wsdl:definitions name="Service" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://tempuri.org/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"><wsdl:types><xsd:schema targetNamespace="http://tempuri.org/Imports"><xsd:import schemaLocation="http://server1.domain.nl/NavService/Service.svc?xsd=xsd0" namespace="http://tempuri.org/"/><xsd:import schemaLocation="http://server1.domain.nl/NavService/Service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/></xsd:schema></wsdl:types><wsdl:message name="IService_SendMessageToQueue_InputMessage"><wsdl:part name="parameters" element="tns:SendMessageToQueue"/></wsdl:message><wsdl:message name="IService_SendMessageToQueue_OutputMessage"><wsdl:part name="parameters" element="tns:SendMessageToQueueResponse"/></wsdl:message><wsdl:portType name="IService"><wsdl:operation name="SendMessageToQueue"><wsdl:input wsaw:Action="http://tempuri.org/IService/SendMessageToQueue" message="tns:IService_SendMessageToQueue_InputMessage"/><wsdl:output wsaw:Action="http://tempuri.org/IService/SendMessageToQueueResponse" message="tns:IService_SendMessageToQueue_OutputMessage"/></wsdl:operation></wsdl:portType><wsdl:binding name="BasicHttpBinding_IService" type="tns:IService"><soap:binding transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="SendMessageToQueue"><soap:operation soapAction="http://tempuri.org/IService/SendMessageToQueue" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="Service"><wsdl:port name="BasicHttpBinding_IService" binding="tns:BasicHttpBinding_IService"><soap:address location="http://server1.domain.nl/NavService/Service.svc"/></wsdl:port></wsdl:service></wsdl:definitions>
The function (or method) I have to call is SendMessageToQueue, and I have to pass 3 parameters to it (two ID's and the output of the xmlport).
Thanks in advance for your effort!0 -
What kind of webservice is this? I usually use SOAPUI and load the WSDL. It generates the xml file needed to access the webservice. In your case it's erroring out.
One suggestion is to start visual studio and try and consume the webservice and see that it works.0 -
Hi Rashed,
I managed to call the server (the webservice has been changed to a classic one) and sent some xml (and get something back). It works fine, as long as the xml that I send does match the xml that the service is expecting.
But now the problem: we intend to use this service for exchanging changes on some 15 different master data tables. For example: when a field in de customer table changes, I want to send the modified data over to the webservice. So the xml that I want to send to the service varies per master table. For the currency table, the layout of the xml will be different.
So I have 15 different xmlports that produce 15 different xmlfiles for 15 different master tables. I want to be able to sent these files to the same classic webservice. How can I achieve that? A collegue that handles the .net side of the service brought up 'streaming of the xml files', but I have no clue on that matter. Do you have an idea? The service that has to be called is an internal one, so we can make modifications to that if that's necessary.
Best regards,
Jes0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 320 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions