Опубликовать XML в веб-сервисе - PullRequest
2 голосов
/ 23 февраля 2010

У меня есть веб-сервис, который принимает ввод XML. То, что я пытаюсь сделать, это настроить страницу aspx, которая отправляет XML в службу. Вот мой код, но я получаю ошибку 400 (неверный запрос), когда я пытаюсь отправить ...

Imports System.Net
Imports System.IO

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Submit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Submit.Click
        Dim strDataToPost As String
        Dim myWebRequest As WebRequest
        Dim myRequestStream As Stream
        Dim myStreamWriter As StreamWriter
        Dim myWebResponse As WebResponse
        Dim myResponseStream As Stream
        Dim myStreamReader As StreamReader


        ' Create a new WebRequest which targets the web service method
        myWebRequest = WebRequest.Create("http://foo/p09SoapHttpPort")

        ' Data to send 
        strDataToPost = DataToSend.Text & Server.UrlEncode(Now())

        ' Set the method and content type
        With myWebRequest
            .Method = "POST"
            .ContentType = "text/xml"
            .Timeout = -1
            .ContentLength = strDataToPost.Length()

        End With



        ' write our data to the Stream using the StreamWriter.
        myRequestStream = myWebRequest.GetRequestStream()
        myStreamWriter = New StreamWriter(myRequestStream)
        myStreamWriter.Write(strDataToPost)
        myStreamWriter.Flush()
        myStreamWriter.Close()
        myRequestStream.Close()

        ' Get the response from the remote server.
        myWebResponse = myWebRequest.GetResponse()

        ' Get the server's response status
        myResponseStream = myWebResponse.GetResponseStream()
        myStreamReader = New StreamReader(myResponseStream)
        ResponseLabel.Text = myStreamReader.ReadToEnd()
        myStreamReader.Close()
        myResponseStream.Close()

        ' Close the WebResponse
        myWebResponse.Close()

    End Sub
End Class

Если кто-нибудь знает о каких-либо хороших веб-ресурсах о том, как загружать файлы .xml в метод веб-службы, это также очень помогло бы, и я ответил бы на этот вопрос, поскольку я могу переработать его таким образом.

Спасибо.

P.S. в последнем редактировании я изменил код так, чтобы он имел .contentlength (спасибо за помощь). К сожалению, после этого я все еще получаю «Плохой запрос». Если кто-то может подтвердить или отменить подтверждение того, что мой код должен работать, я начну исследовать сам сервис.

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

Данные, которые вы пытаетесь опубликовать, могут выглядеть немного забавно, если вы присоединяете к ним временную строку:

strDataToPost = DataToSend.Text & Server.UrlEncode(Now())

Если DataToSend - это правильный XML, то вы добавляете Url-кодировку Now (), которая заставляет меня думать, что он больше не будет действительным XML.

Убедитесь, что ваш StreamWriter не вставляет дополнительные символы (CR, LF). Если это так, то отправляемая длина не соответствует фактическим данным, но это, вероятно, не вызвало бы проблемы, прежде чем вы начали отправлять длину содержимого.

Может ли ваша конфигурация веб-сервиса принимать XML напрямую? Мне интересно, может быть, вам придется инкапсулировать XML в multipart / form-data, чтобы ваш веб-сервис принял его.

1 голос
/ 23 февраля 2010

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

myWebRequest.ContentLength = strDataToPost.Length()
...