#vb.net #post #soap
Вопрос:
Я пытаюсь сделать набросок мыльного поста, предоставленный мне продавцом. Я не программист, но просто пытаюсь собрать воедино то, что могу найти в Интернете. Все полезное было бы оценено по достоинству.
Код, который они предоставили.
POST /ClientService.asmx HTTP/1.1
Host: service.velocify.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "https://service.leads360.com/ModifyLeadStatus"
<?xml version="1.0" encoding="utf-8"?>
<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/">
<soap:Body>
<ModifyLeadStatus xmlns="https://service.leads360.com">
<username>string</username>
<password>string</password>
<leadId>int</leadId>
<statusId>int</statusId>
</ModifyLeadStatus>
</soap:Body>
</soap:Envelope>
Это то, что у меня сейчас есть в VB.net
Module Velocify
Function SOAPRequest()
Dim Request As WebRequest
'Dim Response As WebResponse
Dim DataStream As Stream
Dim Reader As StreamReader
Dim SoapByte() As Byte
Dim SoapStr As String
Dim pSuccess As Boolean = True
SoapStr = "<?xml version=""1.0"" encoding=""utf-8""?>"
SoapStr = SoapStr amp; "<soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">"
SoapStr = SoapStr amp; "<soap12:Body>"
SoapStr = SoapStr amp; "<ModifyLeadStatus xmlns=""https://service.leads360.com"">"
SoapStr = SoapStr amp; "<username>string</username>"
SoapStr = SoapStr amp; "<password>string</password>"
SoapStr = SoapStr amp; "<leadId>int</leadId>"
SoapStr = SoapStr amp; "<statusId>string</statusId>"
SoapStr = SoapStr amp; "</ModifyLeadStatus>"
SoapStr = SoapStr amp; "</soap12:Body>"
SoapStr = SoapStr amp; "</soap12:Envelope>"
Try
SoapByte = System.Text.Encoding.UTF8.GetBytes(SoapStr)
Request = WebRequest.Create("https://www.service.velocify.com")
'Request.Headers.Add("SOAPAction", "")
Request.ContentType = "text/xml; charset=utf-8"
Request.ContentLength = SoapByte.Length
Request.Method = "POST"
DataStream = Request.GetRequestStream()
DataStream.Write(SoapByte, 0, SoapByte.Length)
DataStream.Close()
'Response = Request.GetResponse()
'DataStream = Response.GetResponseStream()
Reader = New StreamReader(DataStream)
Dim SD2Request As String = Reader.ReadToEnd()
DataStream.Close()
Reader.Close()
'Response.Close()
Catch ex As WebException
MsgBox(ex.ToString())
End Try
End Function
End Module
Пожалуйста, дайте мне знать, что я делаю не так. Текущая ошибка заключается в том, что я не получаю ответа от удаленного сервера.
Комментарии:
1. Каждый экземпляр
soap12:
, вероятно, просто должен бытьsoap:
.2. Полезная нагрузка-это XML, поэтому я настоятельно рекомендую работать с ним как таковым, вместо того, чтобы пытаться выполнить конкатенацию строк. Вы рискуете неправильно сформировать XML из-за пропущенных побегов и тому подобного. XML-литералы VB и связанная с ними поддержка для прямой работы со
XElement
связанными типами могут быть полезны.
Ответ №1:
Это маловероятно, но я делал что-то подобное много лет назад, и, возможно, это могло бы вам как-то помочь. Сегодня я использую служебные ссылки только в том случае, если они доступны.
Первое, что нужно сделать, это поместить XML-файл SOAP в текстовое поле, таким образом, вам не нужно иметь дело со всеми («) и косыми чертами. Давайте назовем это txtYourSoap. Замените значения имени пользователя, пароля и всего, что вам нужно. Затем поместите этот код внутри кнопки:
Dim xUri As New Uri("https://service.leads360.com/ModifyLeadStatus")
Dim WebClientx As New System.Net.WebClient()
'WebClientx.Headers.Add("Content-Type", "application/json")
WebClientx.Headers.Add("Content-Type", "text/xml; charset=utf-8")
Try
MsgBox(WebClientx.UploadString(xUri, "POST", txtYourSoap.Text))
Catch
MsgBox(Err.Description)
End Try
Если вы получите ответ в 400 раз, который, вероятно, не сработает, но если это 500 (внутренняя ошибка сервера), это означает, что была связь, вам нужно будет настроить заголовки, добавить новый или перенастроить тип содержимого, UTF-XX и т. Д.)