2010-12-14 5 views
2

API 서버에 POST 요청을 보내고 다른 서버에서 이전에 성공적으로 수행 한 코드를 재사용했습니다. 이유가 무엇인지 알 수없는 이유는 무엇입니까? 일.모든 바이트가 기록 될 때까지 스트림을 닫을 수 없습니다.

"모든 바이트가 기록 될 때까지 스트림을 닫을 수 없습니다." 내가 제대로 콘텐츠 길이를 선언하고 내가 여기에 놓친 거지 무엇 확실하지 않다하더라도

...

  data = data + "</posts>" 
      Dim postBytes As [Byte]() = Encoding.UTF8.GetBytes(data) 
      Thread.Sleep(10000) 
      track = data 
      If uri.Scheme = uri.UriSchemeHttps Then 
       Dim request As HttpWebRequest = HttpWebRequest.Create(url) 
       request.Method = "POST" 

는 '// 일반적으로 그냥 사용 request.contentlength = postbytes.length 또는 data.length입니다

   request.ContentLength = System.Text.Encoding.UTF8.GetByteCount(data) 
       request.ContentType = "application/xml" 
       request.KeepAlive = False 
       request.Timeout = 120000 
      request.Credentials = New System.Net.NetworkCredential("xxxxxxxxxxxx", "xxxxxxxxx") 

       Using writer As New StreamWriter(request.GetRequestStream(), Encoding.UTF8) 
        writer.Write(postBytes) 
        writer.Flush() 
        writer.Close() 
       End Using 
       Using oResponse As HttpWebResponse = request.GetResponse() 
        Dim reader As New StreamReader(oResponse.GetResponseStream()) 
        responseData = reader.ReadToEnd() 
        reader.Close() 
        oResponse.Close() 
       End Using 
       request.Abort() 

      End If 

     End If 
    Catch e As WebException 

....

+0

생각조차하지 말고 알아 냈습니다. – vbNewbie

+1

자신 만의 질문에 답해주세요. 그걸로 모두 배울 수 있고 질문을 "닫으세요"자신의 대답을 수락 할 수 있습니다 ... 이봐, 충분한 사람들이 답변을 투표하면 배지 IIRC를 얻을 수 있습니다! –

답변

9
Dim writer As Stream = request.GetRequestStream() 
       writer.Write(postBytes, 0, postBytes.Length) 
       writer.Close() 

01 위와 같이 내 코드를 변경
12

WebRequest 예상보다 적은 바이트를 쓰고 있기 때문에 Exception이 발생합니다. 예를 들어 ContentLength 속성에서 75 바이트를 설정하고 RequestStream에 69 바이트를 쓰고 예외를 닫으면 예외가 발생합니다.

관련 문제