FtpWebRequest.GetRequestStream зависает и завершается ошибкой.

Я написал веб-сервис, в двух словах он использует openpop для получения сообщений электронной почты, делает вещи с содержимым для вставки в базы данных и сохраняет вложения, которые являются изображениями. Это отлично работает, когда я сохраняю изображения локально, он делает именно то, что должен. Теперь дополнительным требованием было сохранение изображений в каталоге FTP, чтобы я мог динамически создавать свои папки (они создаются на основе метки времени), и это работает хорошо. Моя проблема возникает, когда я пытаюсь сохранить их на ftp. Да, мое имя пользователя и пароль верны, иначе я бы не создавал каталог.

Private Sub UploadFile(ByVal fileToSave As FileInfo, ByVal path As String)
    Dim UploadRequest As FtpWebRequest = DirectCast(WebRequest.Create("ftp://UserName:[email protected]" & path), FtpWebRequest)
    UploadRequest.Credentials = New NetworkCredential("PicService", "grean.matching18")
    UploadRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
    UploadRequest.UseBinary = True
    UploadRequest.UsePassive = True

    ' Const BufferSize As Integer = 2048
    ' Dim content(BufferSize - 1) As Byte, dataRead As Integer
    Dim bFile() As Byte = System.IO.File.ReadAllBytes(fileToSave.ToString)
    'UploadRequest.ContentLength = content.Length

    Using FileStream1 As FileStream = fileToSave.OpenRead()
        Try
            'open request to send
            Using RequestStream As Stream = UploadRequest.GetRequestStream

            End Using
        Catch ex As Exception
        Finally
            'ensure file closed
            FileStream1.Close()
        End Try
    End Using
End Sub

Я также пробовал использовать Passive False и Binary False, я провел больше исследований по трассировке стека. И нашел эту статью но решения пока нет. Буду признателен за любой вклад, я также отправляю еще один вопрос о службах Windows по другой проблеме. Если вы хотите попробовать это, другой вопрос не о ftp, а о разрешениях для службы на сервере Windows 2003.


person Keith Beard    schedule 30.07.2011    source источник
comment
На случай, если кто-то еще наткнется на это... У меня была такая же проблема, но когда я перешел на UsePassive = True, она решила мою проблему.   -  person Daniel Gee    schedule 06.06.2016


Ответы (1)


Это может быть не решение, но я обнаружил, что строка URI должна быть «правильной», а то, что «правильное», зависит от ftp-сервера.

Таким образом, ftp://server/directory/file работает на некоторых серверах, но должен быть ftp://server//directory/file для работы на других (обратите внимание на двойную косую черту после имени сервера).

Кроме того, в вашем URI неправильно написано «пароль»: ftp://UserName:[email protected], и вы также предоставляете учетные данные в отдельной строке кода.

person Community    schedule 10.11.2011
comment
Вы абсолютно правы, но я действительно получил свои учетные данные для этого. Я считаю, что я просто изменил это для примера. Я, наконец, отправил файл, но на другом конце я получил 0 байтов. Я установил точки останова, и файл был преобразован в байты, но не был полностью отправлен на ftp-сервер. - person Keith Beard; 18.11.2011
comment
извините, я не заметил, я никогда не принимал ваш ответ. В итоге я получил учетные данные для работы, но через все маршрутизаторы и коммутаторы что-то произошло, и я получил 0-байтовый файл на другой стороне. Второй набор учетных данных заменял первый, так что это не было опечаткой. Думаю, я просто пробовал. Я создавал папки в каталоге, в котором я также создавал файл, но когда мой код пытался передать байты по проводу, на другом конце оказался файл размером 0 байт. Хотя правильно назвали, лол. - person Keith Beard; 17.12.2011