Мы разрабатываем приложение, которое загружает большие файлы через Интернет. Размер файла до архивирования с помощью DotNetZip составляет около 18 ГБ, а после архивирования - около 4 ГБ. Файл передается с клиентской машины на конечный сервер по защищенному ftp без каких-либо проблем.
Затем клиент вызывает веб-службы .Net, размещенные на конечном сервере, для копирования файла из корня ftp в каталог хранилища, вычисления хэша файла и вызова DotNetZip для распаковки файла.
Веб-службы работают хорошо, когда клиентская машина и конечный сервер, на котором размещены веб-службы, находятся в интрасети.
Однако при использовании той же клиентской машины, но другой производственной целевой серверной машины, на которой размещены веб-службы в Интернете, веб-службы имеют сообщение «Исключение прерывания потока» при копировании, хешировании и распаковке файла размером 4 ГБ.
Обе серверные машины представляют собой сервер Windows 2003 с пакетом обновления 2 (SP2), на них установлены одинаковые компоненты, одинаковая версия IIS 6.0 и одинаковая конфигурация для использования ASP .Net 2.0. Мы скопировали web.config, machine.config, MetaBase.xml с компьютера-сервера интрасети на компьютер-сервер Интернет.
Мы изменили: 1. Код на стороне клиента: тайм-аут прокси веб-службы в коде 7200000 2. Файл web.config серверной машины: (1). (2). 3. Файл машины-сервера machine.config: (1). 4. Серверная машина MetaBase.xml: (1). AspMaxRequestEntityAllowed = "1073741824" 5. В IIS ver6 на веб-сайте -> вкладка службы -> Режим изоляции установлен флажок «Запускать службу WWW в режиме изоляции IIS 5.0».
Наше текущее понимание проблемы на сервере в Интернете заключается в том, что рабочий процесс .Net recycl при значении тайм-аута по умолчанию вызывает исключение «Поток был прерван», даже если поток продолжает завершать копирование файла.
Если наше понимание правильное, то почему такая же конфигурация тайм-аута работает на сервере в интрасети? Как сделать так, чтобы конфигурация тайм-аута работала на нашем производственном сервере в Интернете?