2010-02-23 6 views
2

XML 입력을 허용하는 웹 서비스가 있습니다. 내가 뭘 하려는지 설정 xml 서비스에 게시 aspx 페이지입니다. 여기 내 코드는 지금까지,하지만 난 오류 400 (잘못된 요청)을 얻고 나는 다른 사람이 어떤 좋은 웹 자원을 알고있는 경우에 .xml 파일을 업로드하는 방법XML을 웹 서비스에 게시

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 

... 제출하려고 할 때 웹 서비스 방법은 또한 큰 도움이 될 것이고 나는이 방법으로 그것을 다시 할 수 있으므로이 질문에 대답 할 것이다.

감사합니다.

마지막 편집에서 코드를 수정하여 .contentlength (도움을 주셔서 감사합니다). 불행히도이 후에 나는 여전히 '나쁜 요청'을 받고 있습니다. 누구든지 내 코드가 작동해야한다는 것을 확인/불허 할 수 있으면 서비스 자체를 조사하기 시작합니다.

+0

실행 중 오류 : 원격 서버에서 오류를 반환했습니다 : (400) 잘못된 요청입니다. – Phil

답변

1

당신이 그것에 시간 문자열을 연결하는 경우 조금 재미 보일 수 있습니다 게시하려는 데이터 :

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

DataToSend 적절한 XML 인 경우에, 당신은을 추가하는 더 이상 유효한 XML이 아닐 것이라고 생각하는 Now()의 URL 인코딩.

StreamWriter에서 추가 문자 (CR, LF)를 삽입하지 않았는지 확인하십시오. 그렇다면 전송하는 길이가 실제 데이터와 일치하지 않지만 콘텐츠 길이를 보내기 전에 문제가 발생하지 않았을 것입니다.

웹 서비스 구성에서 XML을 직접 허용합니까? 웹 서비스가 XML을 받아 들일 수 있도록 multipart/form-data에 XML을 캡슐화해야하는지 궁금합니다.

+0

당신의 전설 데이비드! 인코딩을 제거했는데 이제는 제대로 작동합니다! – Phil

1

저는 웹 서비스 전문가는 아니지만 코드를 가지고있는 코드와 비교해 보았습니다. 유일한 차이점은 요청의 ContentLength를 설정하지 않는다는 것입니다.

myWebRequest.ContentLength = strDataToPost.Length() 
+0

도움을 주신 Jason에게 감사드립니다. 이제 contentlength를 추가했으며 여전히 400 오류가 발생했습니다. 내 코드가 작동해야한다는 것을 알게되어 기쁩니다. 그래서 서비스 자체를 들여다 볼 시간입니다. – Phil

관련 문제