Server did not recognize the value of HTTP Header SOAPAction

1

I'm trying to implement a webservice of a software called SmarterTrack just that I'm not getting it ... it gives me the following error:

Server did not recognize the value of HTTP Header SOAPAction: http://localhost:9996/Services2/svcTickets.asmx?op=CreateTicket.

I have tested directly on the browser and it works extremely well.

Sub Execute()
    Dim request As HttpWebRequest = CType(WebRequest.Create("http://localhost:9996/Services2/svcTickets.asmx"), HttpWebRequest)
    request.Method = "POST"
    request.Host = "localhost:9996"
    request.ContentType = "text/xml; charset=utf-8"
    request.Headers.Add("SOAPAction", "http://localhost:9996/Services2/svcTickets.asmx?op=CreateTicket")
    request.Method = "POST"
    Dim soapEnvelopeXml As New XmlDocument()
    soapEnvelopeXml.LoadXml("<?xml version=""1.0"" encoding=""utf-8""?>" & ControlChars.CrLf &
    "<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/"">" & ControlChars.CrLf &
    "<soap:Body>" & ControlChars.CrLf &
    "<CreateTicket xmlns=""http://localhost:9996/Services2/svcTickets.asmx"">" & ControlChars.CrLf &
    "<authUserName>admin</authUserName>" & ControlChars.CrLf &
    "<authPassword>teste123</authPassword>" & ControlChars.CrLf &
    "<departmentID>3</departmentID>" & ControlChars.CrLf &
    "<groupId>3</groupId>" & ControlChars.CrLf &
    "<userIdOfAgent>2</userIdOfAgent>" & ControlChars.CrLf &
    "<toAddress>[email protected]</toAddress>" & ControlChars.CrLf &
    "<subject>test</subject>" & ControlChars.CrLf &
    "<body>teste</body>" & ControlChars.CrLf &
    "<isHtml>True</isHtml>" & ControlChars.CrLf &
    "<setWaiting>True</setWaiting>" & ControlChars.CrLf &
    "<sendEmail>True</sendEmail>" & ControlChars.CrLf &
    "</CreateTicket>" & ControlChars.CrLf &
    "</soap:Body>" & ControlChars.CrLf &
    "</soap:Envelope>")
    Using stream As Stream = request.GetRequestStream()
        soapEnvelopeXml.Save(stream)
    End Using
    Using response As WebResponse = request.GetResponse()
        Using rd As New StreamReader(response.GetResponseStream())
            Dim soapResult As String = rd.ReadToEnd()
            Console.WriteLine(soapResult)
        End Using
    End Using
End Sub
    
asked by anonymous 06.06.2018 / 14:51

2 answers

0

The problem occurs because you are reporting a wrong value in the Header SOAPAction .

The correct value to be informed is contained in the WSDL you are consuming, to know one bit more about WSDL , see this .

You are attempting to consume the CreateTicket method, to find out which SOAPAction is correct for this method, you need to look up this information in WSDL :

<wsdl:operation name="CreateTicket">
    <soap12:operation soapAction="http://www.smartertools.com/SmarterTrack/Services2/svcTickets.asmx/CreateTicket" style="document"/>
    <wsdl:input>
        <soap12:body use="literal"/>
    </wsdl:input>
    <wsdl:output>
        <soap12:body use="literal"/>
    </wsdl:output>
</wsdl:operation>

Note the value of the soapAction attribute:

http://www.smartertools.com/SmarterTrack/Services2/svcTickets.asmx/CreateTicket

In your code, change the value you are assigning in SOAPAction :

From:

request.Headers.Add("SOAPAction", "http://localhost:9996/Services2/svcTickets.asmx?op=CreateTicket")

To:

request.Headers.Add("SOAPAction", "http://localhost:9996/SmarterTrack/Services2/svcTickets.asmx/CreateTicket")

Note: I have changed the SOAPAction for the domain you are trying to use: localhost:9996 .

    
06.06.2018 / 18:07
0

Change the header to:

request.Headers.Add("SOAPAction", "http://localhost:9996/Services2/CreateTicket")

You can also use the WEB reference import, which already does all the mapping work of the service you are consuming, you would not have the need to build XML manually.

To do this, right-click the project: Add > Service Reference > Advanced ... > Add Web Reference paste the URL of your .ASMX or .ASMX service? WSDL name (eg, Consume) and click Add Reference Then in your code you will be able to call the service by:

Dim Servico As New Consumir.svcTickets
Servico.CreateTicket(parametros)
    
12.06.2018 / 14:41