2014-07-23 30 views
0

我寫了一個簡單的客戶端與網頁API我的Web服務在本教程中所解釋的:爲什麼我的WebApi客戶端只能創建一個GET請求?

http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client

的第一個請求(GET表)被成功執行。也就是說,表格數據是從Web服務中提取的,並綁定到TableContent對象。

但是在執行第二個請求(GET表列表)之前,程序被完全阻塞;沒有任何反應,甚至沒有錯誤信息!

如果我註釋掉與第一個請求(GET表)有關的代碼段,則第二個請求(GET表列表)成功執行。

這裏會發生什麼?爲什麼這個客戶端只能執行一個GET請求?

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("http://localhost:56510/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    HttpResponseMessage response; 

    // GET a table from web service 
    response = await client.GetAsync("api/table/GetMatrixTable"); 

    if (response.IsSuccessStatusCode) 
    { 
     var tblcont = await response.Content.ReadAsAsync<TableContent>(); 
     // do things ... 
    } 

    // GET a table list from web service 
    response = await client.GetAsync("api/table/GetTableList"); 

    if (response.IsSuccessStatusCode) 
    { 
     var TblContList = await response.Content.ReadAsAsync<IList<TableContent>>(); 
     // do things ... 
    } 
} 
+0

聽起來像一個僵局,但我不明確究竟是什麼原因。這個客戶端是什麼類型的應用程序?包含您的代碼示例的方法如何調用? –

+0

本教程是本教程中所介紹的控制檯應用程序(.NET 4.5):http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from- a-net-client如教程中所示,Main()中的語句「RunAsync()。Wait()」調用「static async Task RunAsync()」,它包含此處顯示的使用{}塊。 – tuncalik

回答

2

看着下面的SO問題,其接受的答案(也許不是直接相關,但在自己的權利仍然是有用的):

可能會有所幫助,如果您將電話替換爲GetAsync(),如下所示:

response = await client.GetAsync("api/table/GetMatrixTable", 
       HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false); 
. . . 
response = await client.GetAsync("api/table/GetTableList", 
       HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false); 

我無法測試,所以我不能把所有的功勞,如果這樣的作品。

+0

是的,這真的解決了我的問題,謝謝。 – tuncalik

+0

@tuncalik:好東西,不客氣。 – djikay

+0

感謝djikay,@ tuncalik應該確實將此標記爲答案。 –

相關問題