2015-05-07 57 views
0

有關網絡的信息有問題或根本沒有信息。Silverlight 5第一次使用Web API 2失敗[clientaccesspolicy.xml]

我嘗試通過庫使用託管在不同服務器(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的第一嘗試失敗:「TaskCanceledException」因時間,一次(由小提琴手)完成的動作,然後得到完美的: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

在HTTPClient示例中,URI指向8080而不是9000 – Kar

+0

@Kar,API託管在「9000」(端口示例)和WebApp -cliente-「8080」中。示例:http://webapi.com和客戶SL5 http://MyApp.com 兩者都是單獨託管的。如果你在代碼中是正確的,它已被糾正。謝謝。 – 1antares1

回答

0

最後,隨着this article的幫助下,我能得到答案。

ConfigureAwait(false)阻止導航結果,當然由於電線下的長時間等待導致任務被取消。 ()和ConfigureAwait()將有其他更有價值的用途,我的錯誤是在沒有它們的情況下不能捕獲錯誤請求,哪個HttpRequestException在那裏拯救我。

相關問題