Не удается закрыть поток, пока не будут записаны все байты


Я отправляю POST-запрос на сервер API, и я повторно использовал код, где я успешно сделал это раньше на других серверах, и по какой-то причине, которую я не могу понять, почему, он не работает. Я получаю ошибку:

" не удается закрыть поток, пока не будут записаны все байты."

Несмотря на то, что я правильно объявил длину содержимого, и я не уверен, что я здесь упускаю...

            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"

' / / Обычно я просто использую запрос.contentlength = постбайты.длина или данные.длина

                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

....

2 2

2 ответа:

Exception выбрасывается, потому что вы пишете меньше байт, чем ожидает WebRequest. Например, если в свойстве ContentLength вы задали значение 75 байт, а в свойстве RequestStream записали 69 байт и закрыли его, то возникнет исключение.

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

Изменил мой код, как указано выше