当internetconnection缓慢时:WebException - 远程服务器返回错误:NotFound

时间:2013-07-02 20:43:20

标签: c# performance windows-phone-7 windows-phone-8

我在我的应用中使用了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
}

3 个答案:

答案 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.