http客户端 - 异常行为

时间:2012-08-14 21:10:40

标签: asp.net httpclient asp.net-web-api

我有以下代码,有时我发布的处理程序超时(我不想扩展默认超时值),然后才得到响应。发生这种情况时,抛出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;

2 个答案:

答案 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);