Возобновить загрузку файла в Silverlight 4 OOB - PullRequest
2 голосов
/ 12 марта 2011

У меня есть приложение Silverlight 4 вне браузера, которое должно иметь возможность возобновить загрузку внешнего файла, если загрузка по какой-либо причине была прервана.Я хотел бы иметь возможность возобновить вместо перезапуска с самого начала, потому что файл будет довольно большим, и у нас есть потенциал, чтобы у пользователей были медленные соединения.

Я нашел некоторый код в,

http://www.codeproject.com/Tips/157532/Silverlight-4-OOB-HTTP-Download-Component-with-Pau.aspx

но, похоже, в нем много ошибок, поэтому я не совсем уверен, что смогу заставить его работать.

Итак, если у кого-то есть какие-либо другие оригинальные предложения или альтернативы, я бы хотел их услышать.

Спасибо,

1 Ответ

4 голосов
/ 13 марта 2011

Один из подходов, который вы могли бы рассмотреть, - это управление загрузкой с использованием заголовка ответа HTTP / 1.1 Acccept-Ranges и заголовка запроса Range.

Убедитесь, что загружаемый ресурс будет содержать заголовок: -

Accept-Ranges: байты

при запросе (статический файл, отправленный IIS, сделает это по умолчанию).

Теперь с помощью ClientHTTPВ стеке вы делаете начальный запрос "HEAD", чтобы определить, что сервер примет заголовок Range: bytes= в запросе и найдет общий размер отправляемого контента.

Затем вы делаете запрос "GET" дляресурс, включающий заголовок: -

Диапазон: байты = 0-65535

Это ограничивает загружаемый контент только первым фрагментом 64 КБ.Затем вы повторяете тот же запрос с: -

Диапазон: байты = 65536-131071

Каждый раз, когда вы можете сохранить содержимое потока ответов в файл назначения.Вы отслеживаете, сколько байтов вы получили.Когда вы определяете окончательный фрагмент, который, вероятно, будет меньше, чем полный, просто используйте заголовок, например: -

Диапазон: байты = 131072-

Это будет читать до концафайла.

Если запросы к серверу не выполняются, вы можете возобновить работу с соответствующей точки в этой последовательности.

Вы должны быть изящны, если сервер не включает Accept-Ranges заголовок в исходном запросе "HEAD", тогда вам просто нужно загрузить весь файл.

...