![]() |
|
Модераторы: gambit |
![]()
|
|
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Люди добрые! На коленях взываю о помощи! Гугль уже от меня шарахается в страхе, и вся надежда на вас!
Пытаюсь соорудить простенький клиент для WebDav. Никаких проблем, практически, не возникало, пока я не попытался загрузить на сервер файл больше 20мб. И все. Три дня ползаю по инету, уже дошел до того, что тупо копирую все варианты апплоадов, пытаясь найти подходящий, но результат тот же самый: маленькие файлы отправляются без проблем, большие выдают ошибки... Были и 411, и 417, и невозможно записать данные в сокет, и возможно маленький буфер, и требуется длинна, и соединение было завершено... Честно сказать, уже все и не упомню. Из всего, что нашел в инете, было задать протокол System.Net.HttpVersion.Version10, KeepAlive = false, и Timeout'ы увеличить... не помогло ничего... В текущий момент использую код ниже. Да, отправлял как сразу весь массив байтов, так и блоками - разницы особой нет... пробовал от отчаяния и WebClient... Уверен, что как всегда проглядел какую-то ерунду ((((
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
а на самом сайте ограничения нет? Если не изменяет память то 20 мег например ограничения на аплоад в php по умолчанию....
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Мммм... Это не сайт... Просто моему хостеру восхотелось заюзать вебдав. Через ssh мне с работы никак не попасть, а через плагин вебдав к ТС - свои глюки. Там проблема с удалением каталогов, с именами каталогов и файлов... Да и давно хотелось что-нибудь дельное написать. Прославиться в веках, среди жены и тещи ))))
Сниффер показывает, что плагин ТС работает через http 1.1, посылает один байт для аутентификации, и заливает файл... Файл, в отличие от моего способа, появляется на сервере сразу, постепенно набирая размер. Если аплоад прервать, остается неполный файл. Увеличив myHttpWebRequest.Timeout до 20000000 файл я загружаю... сто мегабайт за полчаса - сорок минут. С работы это не проходило, видно там прокси где-то в управе есть... Код немного изменил, загружаю массивами байтов [4096]. Судя по отладчику, сперва все эти массивы копируются в поток, потом долгое подвисание, и только потом, файл появляется на сервере... В гугле нашел несколько похожих проблем, с загрузкой файлов больше 20мб... Решений или нет, или они не работают... Одно решение я не понял как сделать. Там советовали использовать не Stream а MemoryStream и писать WriteTo(). Человек отзывался, что это помогло... Но вот мой несовершенный мозг нифига не понял... На stackoverflow видел... |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
веб дав это тоже просто сайт, и на чем он реализован (на пхп или на чем то еще) хрен его знает 8-)
надо пробывать в общем нам, так - пальцем в небо... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Santa12 |
|
|||
|
вечный чечако Профиль Группа: Участник Сообщений: 46 Регистрация: 20.5.2009 Репутация: нет Всего: нет |
Мммм... Не соглашусь ) WevDav - это защищенный сетевой протокол, поверх HTTP. Более защищенный и надежный чем FTP. В свою очередь, тоже имеет расширения. Смешивать понятия сайт и протокол, имхо, не совсем правильно ) Но это лирика..
В общем, да, загружаю файлы, но установив безумный таймаут - это раз, и второе: 100 мегабайт в час. Честно сказать, я от таких скоростей уже даже отвык. Плюс, получается невозможность отследить объем переданных данных. Если я ошибаюсь, поправьте: для работы, к примеру, прогрессбара, в цикле передаем данные блоками по n-байт, и привязываем это дело к прогресс бару? Здесь получается: цикл проходит довольно быстро, как бы это и должно быть по рассчетной скорости, но потом, на час мы замираем на .GetResponse(). Я так понимаю, это как раз по причине установленного таймаута. Если таймаут убрать, то после того, как в цикле все уходит, на .GetResponse() получаю WebExceptions: request was aborted: request was canceled. В общем, решения я так и не нахожу, увы. В виду этого, задам еще вопрос: есть ли функция дописки файла? Я имею в виду, разбить файл на блоки по 20мб, раз уж они безпроблемные, и так и заливать, дописывая очередной кусок в конец текущего файла. Перезапись, я передаю: "Overwrite" в заголовке. Или вообще забыть про HttpWebRequest и вооружаться сокетами (честно сказать, к ним-то я давно хотел подобраться) Выслушаю любые советы... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |