关于网络我的问题是否有点信息。
我尝试使用库托管在不同服务器(localhost:/ 9000)上的Web API:Silverlight 5项目中的HttpClient(localhost:/ 8080)。
细节是WebClient完美运行,因为在你获得“ clientaccesspolicy.xml ”文件之前,所谓的服务确实(所以我解释):
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
client.Headers["Accept"] = "application/json";
client.DownloadStringAsync(new Uri("http://localhost:9000/api/Orders"));
return ordersList;
第一次尝试中HttpClient不是这样:TimeOut的“ TaskCanceledException ”,一旦(由Fiddler完成)完成动作,然后完美地完成: cap.xml ,如果是JSON格式的Web API,并且第二次尝试方法调用。
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(@"http://localhost:9000/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
try
{
client.Timeout = TimeSpan.FromMilliseconds(15000);
var response = await client.GetStringAsync("api/Orders").ConfigureAwait(false);
return JsonConvert.DeserializeObject<IEnumerable<ClassOrders>>(response);
}
catch (HttpRequestException h)
{
Console.WriteLine(h.Message);
}
catch (TimeoutException t)
{
Console.WriteLine(t.Message);
}
catch (TaskCanceledException c)
{
Console.WriteLine(c.Message);
}
}
ConfigureAwait(false); //I may return if the asynchronous method fails (not frozen in subthread)
答案 0 :(得分:0)
最后,在this article的帮助下,我可以得到答案。
ConfigureAwait(false)阻止了对结果的导航,当然,由于线路下的漫长等待,任务被取消了。
...().Wait()和ConfigureAwait()将有其他更有价值的用途,我的错误是认为没有它们就不可能捕获错误请求,HttpRequestException就是为了解救我。