Вопрос

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

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

Это кажется несколько случайным (не всегда один и тот же файл, количество времени или любой другой шаблон, который я могу вычислить).Также это не происходит в моей рабочей сети (загрузка занимает менее 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 fileeup).Клиентская сторона изменилась только для размещения новых URL-адресов, за исключением того, что она практически не изменилась.

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top