1

我有一个通过网络服务请求天气的方法。这在我的 Lumia 520(在 Windows Phone 8 上)上运行得非常好,但是 Lumia 520(也在运行 Windows Phone 8)上的几个用户报告说它永远无法运行。我在测试版上得到了一个,使测试版输出异常,我被告知这是一个总是发生的 TaskCanceledException 异常。这是该方法的代码:

public async Task<string> getWeatherForCurrentLocation( bool isViaSettings = true )
{
    try
    {
    // Base url is to the web service with the API key and longitude/latitude provided.
    var baseURL = string.Format(URL_FULL_WEATHER, APIKEY, this.Locations[0].Latitude, this.Locations[0].Longitude);

    // Create an HttpClient instance
    var httpClient = new HttpClient();

    try
    {
        httpClient.Timeout = TimeSpan.FromSeconds(20);

        // Send a request asynchronously continue when complete
        HttpResponseMessage response = await httpClient.GetAsync(baseURL);

        // Check that response was successful or throw exception
        response.EnsureSuccessStatusCode();

        // Read response asynchronously
        string responseString = await response.Content.ReadAsStringAsync();

        // Deserialise response into a new ResponseCity object
        try
        {
            Location = JsonConvert.DeserializeObject<ResponseCity>(responseString);


            // rest of code
        }
        catch (Exception e)
        {
            return "fail";
        }
    }
    catch (TaskCanceledException t)
    {
        return "fail";
    }
}
catch (HttpRequestException e)
{
    return "fail";
}

return "success";
}

我设置了一个超时时间,以确保如果天气在 20 秒内没有成功返回,则会出现错误提示。

有谁知道为什么会这样?

任何指导将不胜感激!

更新:

我在我的测试版中遇到了一个有问题的 Lumia 520 用户,并且可以确认问题是 url 正在为他返回 404。这是一个“https”网址。即使他试图通过 IE 打开链接,也没有任何显示。值得重申的是,这个 URL 绝对有效。服务器不是我自己的;这是forecast.io的。

4

0 回答 0