gpt4 book ai didi

windows-phone-7 - HttpWebRequest.BeginGetResponse 完成太晚

转载 作者:行者123 更新时间:2023-12-04 06:20:21 24 4
gpt4 key购买 nike

我在我的代码调用中使用 HttpWebRequest.BeginGetResponse() 方法从我的服务器获取数据。服务器生成的内容范围可能从几 KB 到几 GB。

我的问题是 HttpWebRequest.BeginGetResponse 完成得太晚了。它应该在与服务器建立连接并收到 HTTP header 后立即完成。

以下是使用 GET 方法的示例代码:

public bool StartDownload()
{
try
{
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(m_getUrl);
myHttpWebRequest.Method = "GET";

// Start the asynchronous request.
m_requestState = new RequestState();
m_requestState.request = myHttpWebRequest;

myHttpWebRequest.BeginGetResponse(new AsyncCallback(ResponseCompleted), m_requestState);
}
catch (Exception)
{
m_requestState = null;
}

return m_requestState != null;
}

private void ResponseCompleted(IAsyncResult result)
{
RequestState myRequestState = (RequestState)result.AsyncState;
HttpWebRequest myHttpWebRequest = myRequestState.request;

m_logger.LogMessage("ResponseCompleted notification received!");

HttpWebResponse response = null;
try
{
response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(result);
}
catch (Exception)
{
}
.......
}

例如,我使用“http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.1.tar.bz2”运行代码,结果如下所示:
hh:mm:ss.ms
12:51:30.9440000 - Download started!
12:53:04.8520000 - ResponseCompleted notification received!
12:53:04.8560000 - Header received!
12:53:04.8570000 - DataReceived: 524288 bytes
.........................................
12:53:04.8940000 - DataReceived: 78818 bytes
12:53:04.8940000 - Request data received!
12:53:04.8940000 - Received bytes: 76100578

可以在日志中轻松检测到问题。不可能花费超过一分钟的连接时间和 38 毫秒的时间来下载大约 72.5 MB。
似乎数据是在手机上的某处下载的,只有当完整内容在本地可用时,才会向应用程序发送 RequestComplete 通知。这对我来说不好,因为我需要显示操作的进度。

我在 WP7 的设备和模拟器上得到了相同的结果(也在 WP7.1 上)。

我在 Windows 桌面上运行相同的代码并且它运行正常:请求在一秒钟内完成,其余的下载大约需要 1-2 分钟。

WP7 或 WP 7.1 有什么解决方案吗?
新引入的 WP 7.1 API“后台文件传输”没有帮助,因为我需要完全控制 HTTP header 和内容。并非我向服务器发出的所有 HTTP 请求都会生成文件作为输出。

谢谢!
米海

最佳答案

如果要向下流式传输数据,则需要禁用响应缓冲。您可以通过设置 AllowReadStreamBuffering 来做到这一点。至false .

HttpWebRequest myHttpWebRequest = WebRequest.CreateHttp(m_getUrl);
myHttpWebRequest.Method = "GET";
myHttpWebRequest.AllowReadStreamBuffering = false;

关于windows-phone-7 - HttpWebRequest.BeginGetResponse 完成太晚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6660896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com