2011-02-09 2 views
0

У меня есть интересный: возможность маршалировать загрузку файлов - много в области гигабайта данных.Silverlight Large File Downloader

У меня есть сайт SilverLight, который позволяет загружать большие объемы данных (кабриолетов) с помощью следующей плагин: http://silverlightuploader.codeplex.com/

Однако, я также хочу, чтобы иметь возможность разрешить пользователям загружать одни и те же данные тоже. Но я хочу ограничить количество одновременных загрузок. Таким образом, идея прямого управления потоком данных клиенту с помощью silverlight является убедительной - поскольку я не хочу напрямую устанавливать что-либо на машине.

Мой вопрос: Что касается объема данных, которые я ищу при поиске, целесообразно использовать класс WebClient (я могу указать, сколько байтов в HTTP-потоке я хочу прочитать, поэтому я могу загрузить его поэтапно и поместите некоторые бизнес-правила вокруг него, проверяя, сколько людей в настоящее время загружается, и заставит его подождать, пока счет пользователя не снизится ...), или я могу использовать сокеты, чтобы сохранить накладные расходы по HTTP?

Если нет проекта, который я не нашел, который делает именно эту вещь!

Приветствие заранее,

Matt

ответ

0

Пока вы загружаете данные в кусках некоторого меньшего размера, то фактический объем общего файла не имеет значения, и он не будет на самом деле независимо от того, что вы используете для загрузки. Например, для файла такого размера я бы просто использовал класс WebClient и загружал патроны, возможно, 1 или 2 Мбайта за один раз в файл временного хранилища на диске. Вам нужно будет отслеживать, сколько вы загрузили и где вам нужно начать следующий патрон, но это не слишком сложно. Вы можете использовать сокеты, но тогда вам нужно напрямую связаться с веб-сервером, чтобы получить доступ к файлу в первую очередь.

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