簡體   English   中英

Xamarin HttpClient:TaskCancelledException

[英]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答案標頭:

  1. 連接→關閉(保持活動狀態也不起作用)
  2. 內容長度→951
  3. 內容類型→application / json
  4. 日期→2016年6月16日星期四18:11:40 GMT
  5. 服務器→Apache
  6. X-Powered-By→PHP / 5.5.14

有什么建議么?

一個可能的問題是您的8秒超時。

HttpClient文檔中

默認值為100,000毫秒(100秒)。

域名系統(DNS)查詢最多可能需要15秒才能返回或超時。 如果您的請求包含需要解析的主機名,並且您將Timeout設置為小於15秒的值,則可能需要15秒或更長時間才能引發WebException來指示您的請求超時。

因此,如果您的通話中發生DNS查詢,至少需要15秒。 刪除超時,然后查看問題是否仍然存在。

我遇到過同樣的問題。 我添加了以下行,我能夠得到響應。

httpClient.DefaultRequestHeaders.ConnectionClose = true;

你試一試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM