Наша система предназначена для развертывания в регионах с ненадежными и / или недостаточными сетевыми подключениями. Мы создаем наши собственные отказоустойчивые службы репликации данных, которые используют BITS .
Из-за некоторых требований безопасности и обслуживания мы внедрили нашу собственную службу загрузки файлов ASP.NET на стороне сервера, вместо того, чтобы просто разрешать IIS обслуживать файлы. Когда клиент BITS делает запрос на загрузку HTTP с указанным диапазоном файла наша страница ASP.NET извлекает требуемый сегмент файла в память и служит этим ответом HTTP. Это теория. ;) Эта теория не работает в искусственных лабораторных сценариях, но я бы не позволил системе развернуться в реальных сценариях, если мы не сможем преодолеть это.
Лабораторный сценарий: у меня BITS-клиент и IIS на одной машине разработчика, поэтому практически у меня огромная «пропускная способность» сети, и BITS достаточно умен, чтобы это обнаружить. Поскольку клиент BITS обнаруживает неограниченную пропускную способность, он становится все более «жадным». При каждом HTTP-запросе BITS хочет охватывать все больший и больший диапазон файлов (речь идет о загрузке iso-файлов CD, видео), требуя 20-40 МБ в одном HTTP-запросе, размер, который мне неудобно загружать в память на стороне сервера, как один раз. Я могу преодолеть это, просто давая меньше, чем требовалось. Это нормально.
Однако, BITS получает действительно «уверенные» и «высокомерные» требовательные файлы, БЕЗ указания диапазона загрузки , то есть, он хочет получить весь файл за один запрос, и именно здесь все идет не так. Я не знаю, как ответить на этот ответ в случае файла 600 МБ. Если я просто предоставляю начальный диапазон файла в 1 МБ, клиент BITS продолжает отправлять HTTP-запросы на один и тот же файл без диапазона загрузки для продолжения, он забивает свою мысль о том, что ему нужен весь файл за один раз. Поскольку я неохотно предоставляю весь файл, BITS сдается после нескольких попыток и сообщает об ошибке.
Есть мысли?