1

我在我的应用程序中使用 2 个 WebClients,用于 2 个不同的天气 API。

当我的互联网连接速度很慢时,我从其中一个 API 中得到一个异常。它返回一个 404 Notfound 错误。

我已经通过禁用我的 WiFi 进行了测试,并将数据连接设置为“2G”。第一个 API 毫无问题地返回数据,但是第二个 API 使我的应用程序因 WebException 而崩溃。

当我再次打开 WiFi 时,它可以正常工作。看起来第二个 API 对慢速连接没有耐心。

有没有办法来解决这个问题?我也尝试将 WebClient 更改为 HttpWebRequest 但问题仍然存在。

亲切的问候,尼尔斯

编辑 我的代码:

    private void GettingTheData()
    {
         WebClient Client = new WebClient();
         Client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(Client _DownloadStringCompleted);

         Client.DownloadStringAsync(new Uri("http://theURI.com"));
    }

void Client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
   {

    string result = e.Result.ToString();
    // Let's do the cool stuff overhere
}
4

3 回答 3

4

WP存在HTTP 客户端库,其中包含对超时的支持。关于它的文章。

Windows Phone 8 的一些示例代码:

protected async override void OnNavigatedTo(NavigationEventArgs e)
{
     var httpClient = new HttpClient {Timeout = TimeSpan.FromSeconds(30)};
     var responseBodyAsText = await httpClient.GetStringAsync("www.contoso.com");
}
于 2013-07-11T20:50:44.860 回答
0

尽管默认值为 2,但尝试增加ServicePointManager.DefaultConnectionLimit 。

于 2013-07-16T14:29:21.027 回答
0

也许问题不在于网络延迟。也许您的第二个 API 要求调用者发送用户代理字符串,或您未发送的其他一些 HTTP 标头。它通过 WiFi 而不是 2G 工作的事实可能与从 WiFi 网络连接的任何设备似乎与托管 API 的服务器相同(从 IP 地址的角度来看)并且可能允许基于访问的事实有关在一些缓存的身份上(也许您浏览了该服务以从您的开发 PC 上对其进行测试)。如果响应相似,我很想看看如果您连接到不同的 WiFi 网络会发生什么。

我的直接建议是捕获 WebException 并让用户有机会重试。

我会将此添加为评论,但我想我没有足够的声誉。

于 2013-07-15T18:02:39.170 回答