0

我有以下代码,有时我发布的处理程序会在我得到响应之前超时(我不想扩展默认超时值)。当发生这种情况时,如果有一个 InnerExceptions,则会抛出 AggregateException:

[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;
4

2 回答 2

2

您得到的超时异常是由于 HTTP 客户端放弃等待服务器产生响应。当服务器放弃等待客户端完成其请求时,408 是来自服务器的响应。

据我所知,您要查找的内容没有状态代码。如果服务器能够返回状态码,那么客户端就不需要超时!

于 2012-08-15T00:05:40.180 回答
0

我遇到了同样的错误并将其追踪到我的 HttpClient 超时。默认超时为 100 秒。我在 HttpClient 的创建中添加了以下内容。

HttpClient httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromMinutes(10);

于 2014-11-14T14:00:11.543 回答