我在我的应用中使用了2个WebClient,用于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
}
答案 0 :(得分:4)
WP存在HTTP Client library,其中包含对超时的支持。 Article关于它。
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");
}
答案 1 :(得分:0)
问题可能不是网络延迟。也许您的第二个API要求调用者发送用户代理字符串或您未发送的其他HTTP标头。它可以通过WiFi而不是2G工作的事实可能与以下事实有关:从WiFi网络连接的任何设备看起来与托管API的服务器相同(从IP地址的角度来看),并且可能允许基于访问在某些缓存的身份上(也许您浏览了该服务以从您的开发PC进行测试)。如果您连接到不同的WiFi网络,如果响应类似,我会很高兴看到会发生什么。
我的直接建议是捕获WebException并让用户有机会重试。
我会将此作为评论添加,但我想我没有足够的声誉。
答案 2 :(得分:0)
尝试增加ServicePointManager.DefaultConnectionLimit,但默认值为2.