Brollie Ответов: 2

Ftpwebrequest загрузить пустой файл после обновления windows 1903


Этот код (VB.net) работал хорошо в течение длительного времени.
После обновления windows 1903 он оставляет пустой файл на сервере.
Кто-нибудь может мне помочь?

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
              UploadFile("test.txt", Server & "/test.txt", User, PW)
    End Sub

    Public Sub UploadFile(ByVal _FileName As String, ByVal _UploadPath As String, ByVal _FTPUser As String, ByVal _FTPPass As String)

        Try
            Dim _FileInfo As New System.IO.FileInfo(_FileName)
            Dim _FtpWebRequest As System.Net.FtpWebRequest = CType(System.Net.FtpWebRequest.Create(New Uri(_UploadPath)), System.Net.FtpWebRequest)
            _FtpWebRequest.Credentials = New System.Net.NetworkCredential(_FTPUser, _FTPPass)
            _FtpWebRequest.EnableSsl = True
            _FtpWebRequest.KeepAlive = False
            _FtpWebRequest.Timeout = 15000
            _FtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
            _FtpWebRequest.UseBinary = True
            _FtpWebRequest.ContentLength = _FileInfo.Length
            Dim buffLength As Integer = 2048
            Dim buff(buffLength - 1) As Byte
            Dim _FileStream As System.IO.FileStream = _FileInfo.OpenRead()
            Dim _Stream As System.IO.Stream = _FtpWebRequest.GetRequestStream()
            Dim contentLen As Integer = _FileStream.Read(buff, 0, buffLength)
            Application.DoEvents()
            Do While contentLen <> 0
                _Stream.Write(buff, 0, contentLen)
                contentLen = _FileStream.Read(buff, 0, buffLength)
            Loop
                   Catch ex As Exception
        End Try
    End Sub


Что я уже пробовал:

Используемые рамки 4.6, 4.7 и 4.8

2 Ответов

Рейтинг:
7

Brollie

Почему это сработало для меня, не потеряв никаких данных без обновления до 1903 года?
Я попытался подключить сервер к Total Commander, та же проблема...
Попробовал Filezilla, та же проблема...
Попробовал WINSCP: эта программа может подключаться и загружать/скачивать файлы, а также до и после установки te KB4517389.


Richard MacCutchan

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

Brollie

До тех пор, пока buff длиннее или равен bufferlenght - 1, filetransfer в порядке.

Brollie

Только если buff < bufferlength - 1 он выдает исключение.

Brollie

После обновления windows до 1903 года он всегда создает исключение во время удаления потока.

Richard MacCutchan

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

Brollie

Сообщение:
Не удается записать данные в транспортное соединение.
Внешний хост закрыл соединение.
Это не имеет ничего общего с чем-то на компьютере.
Попробовал его на 20 компьютерах. Без обновления kb4517389 нет проблем, с этим установленным обновлением оно не работает.

Рейтинг:
0

Richard MacCutchan

Dim buffLength As Integer = 2048
Dim buff(buffLength - 1) As Byte
Dim _FileStream As System.IO.FileStream = _FileInfo.OpenRead()
Dim _Stream As System.IO.Stream = _FtpWebRequest.GetRequestStream()
Dim contentLen As Integer = _FileStream.Read(buff, 0, buffLength)

Как отмечалось в исходном сообщении, вы создаете буфер размером 2047 байт, но считываете в него 2048 байт. Это может привести к потере некоторых ваших данных и последующему повреждению загруженных файлов.