Ошибки WebClient UploadFile - PullRequest
       26

Ошибки WebClient UploadFile

2 голосов
/ 28 октября 2009

Я пытаюсь загрузить файлы на веб-сервер с помощью System.Net.WebClient.UploadFile, но получаю исключение WebException. В частности, я получаю 3 ошибки. Я понятия не имею, почему я не получаю ту же ошибку, но все они, кажется, связаны на основе того, что я нашел в Интернете.

  • Запрос был прерван: запрос был отменен.
  • Соединение закрыто. Попробуйте еще раз.
  • Существующее соединение было принудительно закрыто удаленным хостом.

Это кажется несколько случайным (не всегда один и тот же файл, количество времени или любой другой шаблон, который я могу выяснить). Также это не происходит в моей рабочей сети (загрузка занимает менее 2 секунд), но происходит из дома через DSL (загрузка занимает около 2 минут).

Из того, что я обнаружил в Интернете, эти ошибки как-то связаны с keep-alive. К сожалению, WebClient не предоставляет возможности отключить их (я не уверен, что хотел бы, так или иначе, так как это функция производительности).

Я думаю, это может быть связано с тайм-аутами, но я не могу понять, почему. Сервер ASP.Net MVC и время ожидания установлено на час.

    <httpRuntime
        maxRequestLength="10024" 
        executionTimeout="3600"
        /><!-- 10024 = 10MB, 3600 = 1hr -->

Мне интересны оба способа решения этой проблемы, чтобы этого не произошло, а также методы восстановления (простое повторное выполнение запроса не представляется эффективным).

Некоторый фон, это для приложения WinForms, которое загружает фотографии на сервер. Сервер является приложением ASP.Net MVC. Клиент работал правильно в течение долгого времени, но теперь не работает, так как я переключил его на ASP.Net MVC (он использовал классический ASP с SA FileUp). Клиентская сторона изменялась только для размещения новых URL-адресов, за исключением того, что она почти такая же.

1 Ответ

2 голосов
/ 13 ноября 2009

Исключение «Запрос был прерван: запрос был отменен». выбрасывается, если время ожидания WebClient во время передачи файла. Если передача файла не происходит, вместо этого вы получите «Время операции истекло».

Тайм-аут происходит на клиенте. WebClient не позволяет устанавливать время ожидания, и значение по умолчанию для HttpWebRequest (которое использует WebClient) составляет 100 секунд. Я думаю, мне придется выяснить, как получить прогресс при использовании HttpWebRequest. Я также должен выяснить, почему передача файлов ASP.Net происходит медленнее, чем при использовании SAFileUp с классическим ASP.

ОБНОВЛЕНИЕ: я создал класс WebHelper, который заменяет WebClient, но предоставляет больше доступа к необходимым функциям лежащего в основе WebRequest. Он также предоставляет множество дополнительных возможностей по сравнению с WebClient. Если вам интересно, он доступен в проекте BizArk на CodePlex.

...