powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / выгрузка данных с помощью FtpWebRequest
8 сообщений из 8, страница 1 из 1
выгрузка данных с помощью FtpWebRequest
    #38999622
maximIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Пытаюсь выгрузить xml размером более 40 мб на некий фтп хост используя FtpWebRequest

Так вот при выгрузке появляется сообщение "базовое соединение закрыто непредвиденная ошибка при приеме". Если посмотреть на хостинге, то там xml лежит. Скачиваю и смотрю его структуру и он получается недогруженный. Т.е. оборвался при выгрузке. Вы как профессионалы скажите что это может быть? Я за настройки хостинга не отвечаю и за сетевое оборудование. Моя задача попытаться выяснить возможные причины и направить админов в нужном направлении. Иначе ответ с их стороны будет банально прост - с нашей стороны все в порядке, смотрите у себя
...
Рейтинг: 0 / 0
выгрузка данных с помощью FtpWebRequest
    #38999625
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maximIZ, возьмите, для примера, total commander или любую другую тулу-ftp клиент и попробуйте cкопировать свой xml...
...
Рейтинг: 0 / 0
выгрузка данных с помощью FtpWebRequest
    #38999629
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maximIZ, да... и деталей не хватает... одного упоминания о FtpWebRequest мало... и, в любом случае, в логах на стороне хостера будет больше информации... если прокатит с другими клиентами, посмотрите как устанавливается соединение и какие команды шлет серверу клиент.
...
Рейтинг: 0 / 0
выгрузка данных с помощью FtpWebRequest
    #38999634
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда-то у меня работал пример из интернетов...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
FileInfo _file_info = new FileInfo(filename);
string _uri = ...;
// Create FtpWebRequest object from the Uri provided
FtpWebRequest _request = (FtpWebRequest)FtpWebRequest.Create(new Uri(_uri));
// Provide the WebPermission Credintials
_request.Credentials = ...;
// By default KeepAlive is true, where the control connection is not closed
// after a command is executed.
_request.KeepAlive = false;
// Specify the command to be executed.
_request.Method = WebRequestMethods.Ftp.UploadFile;
// Specify the data transfer type.
_request.UseBinary = true;
// Notify the server about the size of the uploaded file
_request.ContentLength = _file_info.Length;
// The buffer size is set to 2kb
int _buff_size = 2048;
byte[] _buff = new byte[_buff_size];
int _content_size = 0;
// Opens a file stream (System.IO.FileStream) to read the file to be uploaded
FileStream _fs = _file_info.OpenRead();

// Stream to which the file to be upload is written
Stream _strm = _request.GetRequestStream();
// Read from the file stream 2kb at a time
_content_size = _fs.Read(_buff, 0, _buff_size);
// Till Stream content ends
while (_content_size != 0)
{
	// Write Content from the file stream to the FTP Upload Stream
	_strm.Write(_buff, 0, _content_size);
	_content_size = _fs.Read(_buff, 0, _buff_size);
}
// Close the file stream and the Request Stream
_strm.Close();
_fs.Close();


...
Рейтинг: 0 / 0
выгрузка данных с помощью FtpWebRequest
    #38999653
maximIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
    Private Sub FtpUploadData(Data() As Byte, FileName As String, UserName As String, Password As String, FtpHost As String, KeepAlive As Boolean)

        Dim FtpUri As Uri = BuildUri(FtpHost, FileName)

        If FtpUri Is Nothing Then Return

        Try

            Dim Request As FtpWebRequest = FtpWebRequest.Create(FtpUri)

            SetRequestParams(Request, WebRequestMethods.Ftp.UploadFile, UserName, Password, KeepAlive)

            Using Stream As System.IO.Stream = Request.GetRequestStream()
                Stream.Write(Data, 0, Data.Length)
            End Using

        Catch ex As WebException
            CurrentErrors.Add(String.Format("{0} {1}", ex.Message, FileName))
        End Try

    End Sub

    Private Shared Sub SetRequestParams(Request As FtpWebRequest, Method As Object, UserName As String, Password As String, KeepAlive As Boolean)
        Request.Method = Method
        Request.Credentials = New NetworkCredential(UserName, Password)
        Request.KeepAlive = KeepAlive
        Request.UseBinary = True
    End Sub



Я использовал три разных хоста. Мои тесты показали:

1. На машине клиента ни на один хост выгрузка так и не прошла. Загрузка обрывается при файле чуть больше 60 мб. При выгрузки файлов меньшего размера 4-10 мб, все проходит отлично. Поставил FileZilla на машину клиента и попробовал через нее выгрузить xml размером 250 мб - все прошло успешно. Но я не думаю что это показатель, поскольку файлзилла вроде не использует FtpWebRequest для выгрузки.
2. На моей домашней машине на два хоста выгрузка не произошла (по той же ошибке), а вот на третий выгрузились все 250 мб без проблем. Файлзиллой не проверял поскольку нет смысла.
...
Рейтинг: 0 / 0
выгрузка данных с помощью FtpWebRequest
    #38999660
maximIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсюда можно сделать вывод: проблема и в настройках хостов и в настройках сети. Нашел на сайте вот такую формулировку

This problem may occur if you are importing a large amount of data and if the connection timeout value for IIS 6.0 is too low

Похоже на мой случай, за исключением iis. Т.е. в настройках хоста где-то задано ограничение на коннект по времени. Я тут не специалист. Скажите, такое возможно? И что-то подобное есть в настройках роутеров или другого сетевого оборудования?
...
Рейтинг: 0 / 0
выгрузка данных с помощью FtpWebRequest
    #38999674
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, я бы FTP протоколом вообще не стал пользоваться, протоколу уже ~45 лет, это даже не смешно уже.
...
Рейтинг: 0 / 0
выгрузка данных с помощью FtpWebRequest
    #38999679
maximIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема решилась благодаря статье http://www.sidesofmarch.com/index.php/archive/2012/04/06/damn-the-documentation-ftpwebrequest-timeout-default-value-is-not-infinite/

Как оказалось нужно указывать Request.Timeout = -1 потому что таймоут по умолчанию не бесконечность. Хотя документация утверждает обратное.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / выгрузка данных с помощью FtpWebRequest
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]