gpt4 book ai didi

c# - Xamarin HttpClient : TaskCancelledException

转载 作者:行者123 更新时间:2023-11-30 21:48:10 25 4
gpt4 key购买 nike

我使用 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");
}

url 是正确的,如果我尝试在 C# 控制台应用程序上执行此代码,我可以获得答案(但不是 Xamarin,Android 和 iOS,在设备和模拟器上)。

我也尝试嗅探 HTTP 数据包,我看到响应是由我的本地服务器发送的,但 Xamarin 没有以正确的方式处理。但是,如果将 url 替换为域(例如 http://stackoverflow.com ),我可以获得答案。

以下 HTTP 应答 header :

  1. 连接→关闭(keep-alive 也不起作用)
  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 documentation :

The default value is 100,000 milliseconds (100 seconds).

A Domain Name System (DNS) query may take up to 15 seconds to return or time out. If your request contains a host name that requires resolution and you set Timeout to a value less than 15 seconds, it may take 15 seconds or more before a WebException is thrown to indicate a timeout on your request.

因此,如果在您的通话中发生 DNS 查询,至少需要 15 秒。删除超时并查看问题是否仍然存在。

关于c# - Xamarin HttpClient : TaskCancelledException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37867506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com