Сервер не распознает значение HTTP-заголовка SOAPAction - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь реализовать веб-сервис из программного обеспечения, называемого SmarterTrack, только из-за того, что я его не получаю ... выдает мне следующую ошибку:

Сервер не распознал значение HTTP-заголовка SOAPAction:http://localhost:9996/Services2/svcTickets.asmx?op=CreateTicket.

Я уже протестировал его непосредственно в браузере, и он работает очень хорошо.

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>teste@teste.pt</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

Я импортировал следующий wsdl непосредственно в Visual Studio в качестве справочного материала службы, просто издеваясь над доменом.Я правильно сделал?http://portal.smartertools.com/Services2/svcTickets.asmx?WSDL

1 Ответ

0 голосов
/ 07 июня 2018

При просмотре этой страницы http://portal.smartertools.com/Services2/svcTickets.asmx?op=CreateTicket вы можете увидеть образцы запросов.Обратите внимание ?op=CreateTicket в качестве параметра этой тестовой формы.

Читая эту же страницу, вы увидите этот пример:

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

, и это значение (возможно, с измененным хостом), котороеВы должны отправить заголовок SOAPAction в свой запрос.

Вы указали URL-адрес тестовой формы с ?op=CreateTicket в своей демонстрации, но это не SOAPAction.

Считайте SOAPAction независимой идентификациейдействие, которое не имеет ничего общего с URL самого действия.Даже если он получен из этого URL в веб-сервисах .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...