Пауза / Возобновление загрузки в C # - PullRequest
3 голосов
/ 26 июня 2009

Я ищу способ приостановить или возобновить процесс загрузки через WebClient C #.

псевдокод:

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

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

Client.Pause();

есть идеи?

Ответы [ 4 ]

6 голосов
/ 26 июня 2009

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

3 голосов
/ 26 июня 2009

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

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

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

2 голосов
/ 21 сентября 2009

хорошо, не дав вам примеров кода, я расскажу вам, что вы можете сделать.

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

что нужно запомнить:

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

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

Вы можете проверить это на Мой блог

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

0 голосов
/ 26 июня 2009

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

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

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

...