Прогресс HTTP в .Net Compact Framework - PullRequest
0 голосов
/ 03 марта 2009

Я работаю над приложением, которое отправляет множество HTTP-запросов «веб-служб», некоторые из которых могут быть довольно большими файлами XML. В данный момент HTTP-запрос выполняется во втором потоке, поэтому графический интерфейс / форма не заблокированы. Но он все еще не может дать пользователю обратную связь относительно хода выполнения запроса.

До сих пор я использовал класс HTTPWebRequest для этой работы, и все мои исследования указывают на то, что он не выполняет обратные вызовы для отчетов о прогрессе ASync, пока он не будет завершен.

В ближайшее время этому приложению придется загружать большие файлы .jpg и .zip через 3G / GPRS. Без индикатора выполнения или какой-либо обратной связи это будет очень неприятно использовать.

Есть ли какая-либо другая (возможно, сторонняя) платформа или класс, который я могу использовать?

Пожалуйста, не публикуйте код, который работает с Desktop .Net, и предполагайте, что он работает на CF, спасибо.

Ответы [ 2 ]

0 голосов
/ 11 марта 2009

Вы можете перехватить поток байтов, поступающих с сервера, с помощью кода, подобного следующему:

HttpWebResponse response = request.GetResponse();

Stream responseStream = response.GetResponseStream();

Затем вы можете обернуть поток ответов в свой собственный класс, который читает из потока HTTP и сообщает, сколько байтов было получено через событие. Вам нужно будет запустить собственный отдельный поток, чтобы запустить его, и вам придется явно записать содержимое потока в файл. (Я не пробовал это в CF, но эти методы задокументированы как работающие для CF.)

0 голосов
/ 05 марта 2009

Имейте в виду, что если файл XML отправляется с заголовком HTTP «Transfer-Encoding: chunked», HTTP не сообщает вам, насколько большим будет файл.

...