web-dev-qa-db-fra.com

N'obtenir aucune erreur d'en-tête SOAPAction lors de l'envoi d'une SOAP demande en HTTP POST

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?

11
Arun

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"/>.

15
Abhishek Asthana
request.Headers.Add( "SOAPAction", YOUR SOAP ACTION );
4
ynneh

// Delphi

var
 xmlhttp : IXMLHTTPRequest; // unit MSXML2_TLB
begin
 xmlhttp := CoXMLHTTP.Create;
 xmlhttp.open('POST', Edit7.Text, False, EmptyParam, EmptyParam);
 xmlhttp.setRequestHeader('SOAPAction','POST')
0
Vadim

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()
0