J'envoie une demande SOAP en tant que HTTP POST dans SOAPUI en raison de contraintes liées au projet . Ma demande est ici:
POST httplink HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "urn:HPD_IncidentInterface_WS/HelpDesk_Query_Service"
Content-Length: 725
Host: itsm-mt-dev
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (Java 1.5)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:HPD_IncidentInterface_WS">
<soapenv:Header>
<urn:AuthenticationInfo>
<urn:userName>XXXXXXXXXX</urn:userName>
<urn:password>XXXXXXXXX</urn:password>
<!--Optional:-->
<urn:authentication>?</urn:authentication>
<!--Optional:-->
<urn:locale>?</urn:locale>
<!--Optional:-->
<urn:timeZone>?</urn:timeZone>
</urn:AuthenticationInfo>
</soapenv:Header>
<soapenv:Body>
<urn:HelpDesk_Query_Service>
<urn:Incident_Number>XXXXXXXXXX</urn:Incident_Number>
</urn:HelpDesk_Query_Service>
</soapenv:Body>
</soapenv:Envelope>
Bien que j'avais défini l'en-tête SOAPAction, je n'obtiens toujours pas d'erreur d'en-tête SOAPAction.
Réponse comme suit:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode xmlns:ns1="http://xml.Apache.org/axis/">ns1:Client.NoSOAPAction</faultcode>
<faultstring>no SOAPAction header!</faultstring>
<detail>
<ns2:hostname xmlns:ns2="http://xml.Apache.org/axis/">itsm-mt-dev</ns2:hostname>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Quelqu'un peut-il me suggérer ce que nous pouvons faire ici?
Il semblerait que vous envoyiez un en-tête soapAction incorrect. Consultez le WSDL et découvrez la valeur de l'élément soapAction pour le service testé.
Dans le WSDL, recherchez une ligne semblable à <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
.
request.Headers.Add( "SOAPAction", YOUR SOAP ACTION );
// Delphi
var
xmlhttp : IXMLHTTPRequest; // unit MSXML2_TLB
begin
xmlhttp := CoXMLHTTP.Create;
xmlhttp.open('POST', Edit7.Text, False, EmptyParam, EmptyParam);
xmlhttp.setRequestHeader('SOAPAction','POST')
J'ai essayé d'ajouter un commentaire dans la réponse suggérée par ynneh mais le code n'était pas lisible ... Sa réponse est utile mais trop courte.
Créez un httpwebrequest, puis ajoutez-lui des en-têtes . Voici un exemple complet:
Dim bytSoap = System.Text.Encoding.UTF8.GetBytes("soap content")
Dim wrRequest As HttpWebRequest = HttpWebRequest.Create("xxxxx")
wrRequest.Headers.Add("your soap header", "xxx")
wrRequest.ContentType = "text/xml; charset=utf-8"
wrRequest.Method = "POST"
wrRequest.ContentLength = bytSoap.Length
Dim sDataStream As Stream = wrRequest.GetRequestStream()
sDataStream.Write(bytSoap, 0, bytSoap.Length)
sDataStream.Close()
Dim wrResponse As WebResponse = wrRequest.GetResponse()
sDataStream = wrResponse.GetResponseStream()
Dim srReader As StreamReader = New StreamReader(sDataStream)
Dim strResult As String = srReader.ReadToEnd()
txtResult.Text = strResult
sDataStream.Close()
srReader.Close()
wrResponse.Close()