2010-02-23 101 views
2

我有一个Web服务,它接受XML输入。我想要做的是设置一个aspx页面,将xml发布到服务中。这是到目前为止我的代码,但我得到一个错误400(错误的请求),当我试图提交...将XML发布到Web服务

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服务方法,这也将是一个很大的帮助,并会回答这个问题,因为我可以重新这样工作。

谢谢。

P.S在上次编辑时,我修改了代码以使其具有.contentlength(感谢您的帮助)。不幸的是,在此之后,我仍然收到'不良要求'。如果任何人可以确认/否认我的代码应该工作,我将开始调查服务本身。

+0

运行时的错误是:远程服务器返回错误:(400)错误的请求。 – Phil 2010-02-23 12:43:50

回答

1

你想,如果你串联一个时间字符串将其张贴看起来有点滑稽的数据:

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

如果DataToSend是正确的XML,那么你加入Url编码Now()这让我认为它将不再是有效的XML。

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

您的Web服务配置是否直接接受XML?我想知道,如果您可能需要将XML封装在多部分/表单数据中才能让您的Web服务接受它。

+0

大卫你的传奇!我删除了编码,现在它工作正常! – Phil 2010-02-25 10:37:38

1

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

myWebRequest.ContentLength = strDataToPost.Length() 
+0

感谢Jason的帮助,我现在添加了contentlength并且仍然收到400错误。我很高兴看到我的代码“应该”工作,所以我认为是时候看看服务本身。 – Phil 2010-02-24 05:55:14