2009-10-28 2 views
2

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

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

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

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

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

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

Я заинтересован в обоих направлениях, чтобы исправить эту проблему, так что не происходит, а также методы восстановления (просто сделать запрос снова не представляется эффективным).

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

ответ

2

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

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

UPDATE: Я создал класс WebHelper, который заменяет WebClient, но предоставляет больше доступа к необходимым функциям базового WebRequest. Он также предоставляет множество дополнительных возможностей через WebClient. Если вас это интересует, оно доступно в BizArk project на CodePlex.

+0

спасибо, очень помогли! –

Смежные вопросы