将XML发布到Web服务

时间:2010-02-23 07:33:36

标签: asp.net xml web-services post

我有一个Web服务,它接受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文件上传到web服务方法的任何好的网络资源,这也是一个很好的帮助,并会回答这个问题,因为我可以这样重新工作。

感谢。

在上一次编辑中,我将代码修改为.contentlength(感谢您的帮助)。不幸的是,在此之后,我仍然收到“错误请求”。如果有人可以确认/否认我的代码应该正常工作,我将开始调查服务本身。

2 个答案:

答案 0 :(得分:1)

我不是网络服务专家,但我将您的代码与我的一些工作代码进行了比较,唯一相关的区别是您没有设置请求的ContentLength。

myWebRequest.ContentLength = strDataToPost.Length()

答案 1 :(得分:1)

如果您要将时间字符串连接到它,那么您尝试发布的数据可能看起来有点滑稽:

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

如果DataToSend是正确的XML,那么您正在添加Url Encoding of Now(),这使我认为它将不再是有效的XML。

检查以确保您的StreamWriter未插入其他字符(CR,LF)。如果是,那么您发送的长度与实际数据不对应,但在开始发送内容长度之前可能不会引起问题。

您的Web服务配置是否直接接受XML?我想知道您是否可能必须将XML封装在multipart / form-data中,以便您的Web服务接受它。