【发布时间】:2012-09-21 07:18:43
【问题描述】:
是否可以在 WinRT 中同时发送两个以上的 HTTP 请求?我正在尝试从服务器加载多个 JSON 文档,而 HttpWebRequest 在第二次调用后无法响应。这是一个示例 sn-p 说明了这一点:
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
const string url = "http://www.bom.gov.au/fwo/IDV60901/IDV60901.94868.json";
const int iterations = 3;
var tasks = new List<Task>();
var ticks = DateTime.Now.Ticks;
for (var i = 0; i < iterations; i++)
{
// Create unique URL by appending a generated number.
var uniqueUrl = string.Format("{0}?v={1}", url, (i + ticks));
// Create the request.
var request = WebRequest.CreateHttp(uniqueUrl);
// Create the async task and store it for later.
var task = request.GetResponseAsync();
tasks.Add(task);
}
// Await all tasks in collection.
await Task.WhenAll(tasks);
Debugger.Break(); // <----- This will never break when iterations > 2
}
将此代码放入空白 MainPage.xaml.cs 并使用迭代值。如果将其设置为 2,则它可以工作。超过此值,它就会失败。
注意 :: 测试时不要使用 Fiddler。 Fiddler 做了一些有趣的事情,它允许所有这些连接通过。我不知道如何也不知道为什么。你可以自己测试一下。如果你在 fiddler 打开的情况下运行上面的代码,那就成功了。
注意 :: 这不是真正的代码。我只是用这个例子来说明问题。
【问题讨论】:
-
您能出示您的代码吗?否则很难诊断。 :)
-
这不是因为 HTTP 规范规定,在任何给定时间,客户端最多只能对给定主机进行两个请求?
-
@DominicHopton:这不是浏览器问题吗?为什么 WinRT 会阻止我连接两次以上?此外,所有平台都允许您发出多个请求,但它们在内部管理队列。一次只能执行 2 个,但 WinRT 只是将您的请求丢弃。
-
@ZombieSheep - 我的代码还有很多其他内容。在这里复制/粘贴会很麻烦。我会尝试创建它的一个小版本:)