Я пытаюсь загрузить несколько байтов из веб-источника, используя HttpWebRequest
(может быть любым другим способом - я пробовал WebRequest, HttpClient...) в среде выполнения Windows Phone 8.1 - полный код:
private async void Download1000_Click(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Download Started");
HttpWebRequest longRequest = (HttpWebRequest)WebRequest.Create(new Uri(@"http://s3.amazonaws.com/dnr/dotnetrocks_0986_enterprise_sharepoint.mp3"));
longRequest.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString(); // prevent caching the whole file
longRequest.AllowReadStreamBuffering = false;
using (WebResponse myResponse = await longRequest.GetResponseAsync())
using (Stream myStream = myResponse.GetResponseStream())
{
int bytesRead = 0;
byte[] myBuffer = new byte[1000];
Stopwatch newWatch = new Stopwatch();
newWatch.Start();
while ((bytesRead = await myStream.ReadAsync(myBuffer, 0, 1000)) > 0)
Debug.WriteLine(bytesRead.ToString() + " bytes read. Elapsed time: " + newWatch.Elapsed.TotalSeconds.ToString("0.000000") + " seconds");
}
Debug.WriteLine("Download Finished");
}
Проблема - код работает, но ОС почему-то не дает прочитать небольшое количество байт (даже я отключил AllowReadStreamBuffering
) - вроде скачивает файл целиком в какой-то кеш(?) и потом запускает while loop
. Это выглядит так:
Как видите - первая сумма байт появляется через 22 секунды - файл скачался целиком. Наоборот, когда я создал тот же код (скопировал-вставил) на Windows Phone 8.1 Silverligh и запустил на том же устройстве - он работает как надо:
Есть ли способ загрузить количество байтов во время выполнения WP8.1 без предварительной загрузки всего файла?
MaxResponseContentBufferSize
, черезIBuffer
, с параметрами InputStream Partial, и он всегда ведет себя одинаково. Думал, может что-то пропустил. - person Romasz   schedule 24.05.2014