我使用Web Api为我的Web服务编写了一个简单的客户端,如本教程中所述:
http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client
第一个请求(GET表)成功执行。也就是说,表数据从Web服务获取并绑定到 TableContent 对象。
但程序在执行第二个请求(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 :(得分: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);
我无法对此进行测试,因此如果可行,我无法获得所有功劳。