[英]Xamarin HttpClient: TaskCancelledException
我使用HttpClient在本地服務器上發送發布請求(在LAMP或MAMP上打開電源,嘗試了兩者),但無法獲取答案,始終使用以下代碼獲取“任務已取消異常”
try
{
using (HttpClient client = new HttpClient())
{
client.Timeout = new TimeSpan(0, 0, 10);
var sendContent = new StringContent(serialized);
using (HttpResponseMessage response = await client.PostAsync(url.ToString(), sendContent))
{
if (response.StatusCode != HttpStatusCode.OK)
return MakeError("Bad status: " + response.StatusCode.ToString());
using (HttpContent content = response.Content)
{
string str = await content.ReadAsStringAsync();
if (str == null)
return MakeError("Got null answer");
App.Log("Response: " + str);
return str;
}
}
}
}
catch (Exception e)
{
App.Log("There is something bad with request: " + serialized + " the error was " + e.Message + " url = " + url.ToString());
return MakeError("Timed out");
}
如果我嘗試在C#控制台應用程序上執行此代碼,則該URL是正確的,我可以得到答案(但不能在設備和仿真器上同時使用Xamarin,Android和iOS)。
我也嘗試嗅探HTTP數據包,但看到該答案是由本地服務器發送的,但是Xamarin卻沒有以這種正確的方式處理。 但是,如果將URL替換為域(例如http://stackoverflow.com ),我可以得到答案。
以下HTTP答案標頭:
有什么建議么?
一個可能的問題是您的8秒超時。
默認值為100,000毫秒(100秒)。
域名系統(DNS)查詢最多可能需要15秒才能返回或超時。 如果您的請求包含需要解析的主機名,並且您將Timeout設置為小於15秒的值,則可能需要15秒或更長時間才能引發WebException來指示您的請求超時。
因此,如果您的通話中發生DNS查詢,至少需要15秒。 刪除超時,然后查看問題是否仍然存在。
我遇到過同樣的問題。 我添加了以下行,我能夠得到響應。
httpClient.DefaultRequestHeaders.ConnectionClose = true;
你試一試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.