【发布时间】:2014-01-30 23:34:44
【问题描述】:
我正在尝试在 windows phone 8 中完成之前获取对响应流的引用。
在其他.Net平台上你可以做
HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(myUri);
WebResponse subscribeWebResponse = null;
Stream subscribeStream = null;
subscribeWebResponse = httpRequest.GetResponse();
subscribeStream = subscribeWebResponse.GetResponseStream();
为了创建可移植类库,我使用了 nuget 的 HttpClientLibrary。
这会将引用添加到扩展程序集 Microsoft.Net.Http
这允许我在读取标头时返回异步请求,而不是等待内容传输完成
var clientResponse = await httpClient.SendAsync(requestmessage, HttpCompletionOption.ResponseHeadersRead);
我遇到的问题是在 windows phone 8 中它无法正常工作,并且仍在等待内容流完成返回。
另外
await httpWebRequest.BeginGetResponse(callback, request)
与这些异步方法具有相同的行为,实际上是在等待网络响应完成以继续执行。
那么,在我收到没有 Microsoft.Http.Net 包的响应标头时,有什么方法可以实现返回响应/流? 即使它必须是 Windows Phone 8 平台特定解决方案? 可能是 HttpWebRequest 的扩展?
【问题讨论】:
-
你可以使用
WebRequest.GetResponseAsync,比如this,然后是WebResponse.GetResponseStream,然后是Stream.ReadAsync。 -
我已经看过那篇堆栈溢出文章。它不是为 Windows Phone 8 编写的,因为 Windows Phone 8 中不存在类 HttpWebRequest 的 GetResponseAsync 方法。
-
@ZackWeiner 您正在做的是正确的做法。你确定它不工作吗?你的响应体有多大?你怎么知道它还在等待“内容流的完成”?
-
@DarrelMiller 我使用的连接不应该关闭,它应该保持打开状态以获取从服务器发送的事件。所以在桌面上使用 httpRequest.GetResponseStream() 我可以读取流直到它结束。我知道代码正在等待响应的内容,因为在其他平台(WPF)上 var clientResponse = await httpClient.SendAsync(requestmessage, HttpCompletionOption.ResponseHeadersRead);几乎立即返回,但在电话上,该方法仅在连接超时或显式关闭时返回(使用 GUI 工具 Fiddler)。
-
@ZackWeiner 你启发了我安装 WP8 SDK。我需要自己尝试一下。
标签: windows-phone-8 httpwebrequest async-await dotnet-httpclient