Silverlight 5第一次使用Web API 2失败[clientaccesspolicy.xml]

时间:2015-05-07 16:16:59

标签: c# silverlight asp.net-web-api httpclient webclient

关于网络我的问题是否有点信息。

我尝试使用库托管在不同服务器(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)

1 个答案:

答案 0 :(得分:0)

最后,在this article的帮助下,我可以得到答案。

ConfigureAwait(false)阻止了对结果的导航,当然,由于线路下的漫长等待,任务被取消了。

...().Wait()和ConfigureAwait()将有其他更有价值的用途,我的错误是认为没有它们就不可能捕获错误请求,HttpRequestException就是为了解救我。