9

私はSystem.Net.Http.HttpClient、コンソールアプリケーションからREST APIに一連のリクエストを投稿し、JSON応答を厳密に型指定されたオブジェクトに逆シリアル化するために使用しています。私の実装は次のようになります。

using (var client = new HttpClient())
{
    var content = new StringContent(data, Encoding.UTF8, "text/html");
    var response = client.PostAsync(url, content).Result;

    response.EnsureSuccessStatusCode();

    return response.Content.ReadAsAsync<MyClass>().Result;
}

ただし、この質問で説明した問題と非常によく似た問題が発生しています。リクエストがFiddler経由でルーティングされるとすべて正常に機能しますが、Fiddlerが無効になっている場合は4番目または5番目のリクエストの後にハングします。

問題の原因が同じである場合、各リクエストの後にリソースを完全に解放するためにさらに何かをする必要があると思いますが、HttpClientこれを行う方法を示すコードサンプルを見つけることができません。

誰かが私を正しい方向に向けることができることを願っています。

どうもありがとう、

ティム

4

1 に答える 1

12

あなたはHttpResponseMessageオブジェクトを処分していません。これにより、サーバーでストリームが開いたままになる可能性があり、個々のサーバーでストリームのクォータがいっぱいになると、それ以上リクエストが送信されなくなります。

using (var client = new HttpClient())
{
    var content = new StringContent(data, Encoding.UTF8, "text/html");
    using(var response = client.PostAsync(url, content).Result)
    {    
        response.EnsureSuccessStatusCode();
        return response.Content.ReadAsAsync<MyClass>().Result;
    }
}
于 2012-12-31T15:10:11.323 に答える