2009-06-26 2 views
3

Я ищу способ приостановить или возобновить процесс загрузки через веб-клиент C#.Пауза/резюме Загрузка в C#

псевдокод:

WebClient Client = new WebClient(); 
Client.UploadFileAsync(new Uri("http://mysite.com/receiver.php"), "POST", "C:\MyFile.jpg");

Может быть что-то вроде ..

Client.Pause();

любая идея?

+0

Согласен с Джоном! Я действительно открыл этот вопрос, потому что мне было любопытно посмотреть, как идут C# и PHP;) – Hemant

ответ

6

WebClient не имеет такой функциональности - даже немного низкий уровень HttpWebRequest, насколько мне известно, не знает. Вам нужно будет использовать библиотеку HTTP, которая дает вам больше контроля над точно, когда что-то случится (что, конечно же, будет связано и с большим количеством кода). Точка WebClient представляет собой очень простой API для использования в очень простых ситуациях.

3

Как заявил Джон Скит, это недоступно в классах Webclient not HttpWebRequest.

Однако, если у вас есть контроль над сервером, который получает загрузку; возможно, вы могли бы загружать небольшие куски файла с помощью WebClient и иметь сервер, собирающий куски, когда все было получено. Тогда вам будет несколько проще сделать функцию паузы/возобновления.

Если у вас нет контроля над сервером, вам нужно будет использовать API, который даст вам простой контроль и впоследствии даст вам больше информации, о которой вы можете беспокоиться. И даже тогда сервер может дать вам тайм-аут, если вы приостановите слишком долго.

0

Чтобы сделать что-то подобное, вы должны написать собственный рабочий поток, который делает фактический пост HTTP пошагово.

Перед отправкой вам необходимо проверить, приостановлена ​​ли операция и прекратить отправку содержимого файла до его возобновления.

Однако в зависимости от сервера соединение может быть закрыто, если оно неактивно в течение определенного периода времени, и это может быть всего несколько секунд.

2

ОК, без указания примеров кода Я расскажу вам, что вы можете сделать.

Напишите службу WCF для вашей загрузки, эта служба должна использовать потоковое вещание.

вещи, чтобы помнить:

  • клиент и сервер должен определить файл некоторые, как я предлагаю использовать в виде Guid, так что сервер знает, что файл, чтобы добавить дополнительные данные тоже.
  • Клиент должен следить за состоянием в массиве, чтобы он знал , где начать потоковое вещание после него возобновляет его. (вы даже можете получить сервер , чтобы сообщить клиенту, сколько у него данных, но удостоверьтесь, что клиент тоже знает).
  • Серверу необходимо отслеживать, как данных, которые вы уже загрузили и сколько еще не хватает.файлы должны иметь время жизни на сервере , вы не хотите, чтобы половина загружалась и забыли файлы, хранящиеся на сервере навсегда.
  • , пожалуйста, помните, что потоковая передача не разрешает аутентификацию, так как вызов всего лишь один URL-адрес. Вы можете использовать ssl, но помните, что добавит дополнительные накладные расходы.
  • вам необходимо будет создать сервис договор на уровне сообщения стандарт способ не делает.

В настоящее время я пишу пост в блоге по самому предмету, он будет опубликован на этой неделе с образцами кода, как заставить его работать.

вы можете проверить его на My blog

Я знаю, что это не содержит образцы кода, но блог будет иметь некоторые, но в целом это один из способов сделать остановку и резюме загрузки файлов на сервер.

Смежные вопросы