Нужна помощь в преобразовании мыльного поста в VB.net

#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 и т. Д.)