Вопрос по c# – Пауза / Возобновление загрузки в C #

3

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

псевдокод:

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

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

Client.Pause();

любая идея?

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

Ваш Ответ

4   ответа
6

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

3

это недоступно ни в классах Webclient, ни в классах HttpWebRequest.

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

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

2

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

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

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

client and server needs to identify the file some how i suggest the use of a Guid so the server knows what file to append the extra data too. Client needs to keep track of position in the array so it knows where to begin the streaming after it resumes it. (you can even get the server to tell the client how much data it has but make sure the client knows too). Server needs to keep track of how much data it has already downloaded and how much still missing. files should have a life time on the server, you dont want half uploaded and forgotten files stored on the server forever. please remember that, streaming does not allow authentication since the whole call is just one httprequest. you can use ssl but remember that will add a overhead. you will need to create the service contract at message level standard method wont do.

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

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

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

0

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

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

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

Похожие вопросы