0

次のコードがあります。応答を受け取る前に、投稿先のハンドラーがタイムアウトすることがあります (デフォルトのタイムアウト値を延長したくない)。これが発生すると、1 つの 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 の create に以下を追加しました。

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

于 2014-11-14T14:00:11.543 に答える