我有以下代码,有时我发布的处理程序超时(我不想扩展默认超时值),然后才得到响应。发生这种情况时,抛出AggregateException,其中有一个InnerExceptions:
[0] {“任务被取消。”} System.Exception {System.Threading.Tasks.TaskCanceledException}
var _httpClient = new HttpClient();
var _content = new StringContent("thecontent");
var responseMessagePost = _httpClient2.PostAsync("http://localhost:50643/handler1.ashx", _content).Result;
这是正确的行为吗?
我期望变量responseMessagePost的状态代码为RequestTimeout = 408.例如,当我执行以下操作时,不会抛出异常,并且我得到状态代码NotFound = 404.为什么行为不同?
var httpClient = new HttpClient();
var _content = new StringContent("thecontent");
var _responseMessagePost = httpClient.PostAsync("http://localhost:50643/handlerdoesnotexist.ashx", _content).Result;
答案 0 :(得分:2)
您获得的超时异常是由于HTTP客户端放弃等待服务器产生响应。 408是服务器在服务器放弃等待客户端完成请求时的响应。
据我所知,您找不到任何状态代码。如果服务器能够返回状态代码,那么客户端就不需要超时了!
答案 1 :(得分:0)
我收到了同样的错误,并将其追踪到我的HttpClient超时。默认超时为100秒。我在HttpClient的创建中添加了以下内容。
HttpClient httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMinutes(10);
HttpClient httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMinutes(10);