仅在WP8.1上:无法从HTTP流中读取超过65536个字节

时间:2015-06-11 13:59:42

标签: wpf windows windows-phone-8.1 httpwebrequest http-streaming

希望有人可以请求我在很长一段时间内努力解决的问题。

目标:我需要从指定的URI读取一个http流,我启动&无休止地阅读以下代码(我将其删除至最低限度,以便真正专注于裸通信问题):

public void StartupStream(Uri uri)
{
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);

    // Start the asynchronous request
    request.BeginGetResponse(OnGetResponse, request);
}
private void OnGetResponse(IAsyncResult asyncResult)
{
    // get the response
    HttpWebRequest req = (HttpWebRequest)asyncResult.AsyncState;
    try
    {
        using (HttpWebResponse resp = (HttpWebResponse)req.EndGetResponse(asyncResult))
        {
            using (Stream s = resp.GetResponseStream())
            {
                // dummy-read the stream forever
                int readBytes = 0;
                byte[] buffer = new byte[4096];
                while (true)
                {
                    readBytes += s.Read(buffer, 0, buffer.Length);
                }
            }
        }
    }
    catch (Exception ex)
    {
        throw;
    }
    finally
    {
        req.Abort();
    }
}

问题:碰巧上面相同的完全代码完全在演示桌面WPF应用程序上运行,读取“千兆字节”数据没有任何问题,而在Windows Phone 8.1商店应用程序上我只能读取最多65536个字节,然后随后调用s.Read(buffer,0,buffer.Length)(在无限while循环中)只是​​永远挂起,没有任何异常!

我已尝试过的事情,没有任何结果:

  • 更改缓冲区大小的多个值(即256,512,1024 ......和 等等)
  • 在设备和模拟器上运行WP 8.1应用程序
  • 使用WireShark嗅探流量,我可以看到WPF和WP 8.1场景中的启动请求完全相同,都是HTTP 1.1,在所有情况下,服务器(D-link DCS-920网络摄像头)继续完美地“泵送”HTTP 1.1响应(mjpeg数据)到流

有没有人知道在WP 8.1上使用这种简单的HTTP流使用可能会发生什么?怎么会对读取有65536字节的限制?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这就是我从网上下载图片的方式。示例中的文件大小为1131683

     string URL = "http://img.uuhy.com/uploads/2010/05/4423_Free-high-resolution-desktop-wallpaper-8.jpg"; 
        var httpClient = new HttpClient();
        var httpResponse = await httpClient.GetAsync(URL);

       var ImageArray = await httpResponse.Content.ReadAsByteArrayAsync();