.NETのHTTP要求でパフォーマンスの問題が発生しました。 localhostのREST APIへのHTTP GETリクエストは完了するまでに約500ミリ秒かかりました。修正に多くの時間を費やしました。さまざまな方法を試しました:HttpClient
、 HttpWebRequest
、WebClient
、およびRestSharp
。これらはいずれも機能しません。インターネット上のほとんどのソリューションでは、Proxy
パラメーターをnull
に設定すると言われていますが、それでも高速には動作しません。
この時間を短縮することがわかった唯一の方法は、リクエストのKeep-Aliveパラメーターをfalseに設定することです。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "GET";
request.KeepAlive = false;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
これはうまく機能します。時間は7〜10ミリ秒に短縮されます。しかし、今ではいくつかの理由で、HttpClient
の代わりにHttpWebRequest
を使用する必要があります。 HttpClient
のKeep-Aliveをfalseに設定する方法が見つかりません。私が見つけた唯一のことは、「connection」ヘッダーを「Keep-Alive」に設定することでtrueに設定する方法です。
POST HttpClientによるリクエストにこのコードを使用しています:
HttpClient _http = new HttpClient();
_http.DefaultRequestHeaders.Accept.Clear();
_http.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
_http.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");
var content = new StringContent(
request, Encoding.UTF8, "application/%appname%+xml");
content.Headers.ContentType.Parameters.Add(
new NameValueHeaderValue("type", "payload"));
HttpResponseMessage response = await _http.PostAsync(uri, content);
そして、完了するまでに約500〜600ミリ秒かかります。
HttpWebRequest.KeepAlive = true
を設定すると、ヘッダーセットはConnection:keep-aliveになります
HttpWebRequest.KeepAlive = false
を設定すると、ヘッダーセットはConnection:closeです
だからあなたが必要になります
_http.DefaultRequestHeaders.Add("Connection", "close");
このコードを使用して、クライアントでHTTPキープアライブを無効にします。
_http.DefaultRequestHeaders.ConnectionClose = true;
これにより、Connection
リクエストヘッダーがclose
に設定されます。
以下のコードを参照してください:
HttpClient cli;
...
cli.DefaultRequestHeaders.Add("Connection", "keep-alive");
cli.DefaultRequestHeaders.Add("Keep-Alive", "600");
これがあなたの助けになることを願っています、私はテストしました
_client.DefaultRequestHeaders.Connection.Add("Keep-Alive");
HttpClientHandlerを作成し、リクエストの直前にハンドラーでヘッダー「Connection」を削除しました。この場合、デフォルトの「接続:キープアライブ」を設定します。その前にデフォルトでHttpClientにそれを置いたとしても、プロパティなどを設定してください。ハンドラを確認してください。