HttpWebRequest を使用して、社内で構築された HTTP サーバーに接続しています。私の問題は、たとえば PostMan ( https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en )を介してサーバーに接続するよりもはるかに遅いことです。 Chrome の組み込み関数を使用してデータを要求します。
サーバーは、MSDN ( http://msdn.microsoft.com/en-us/library/dxkwh6zw.aspx ) でこの例を使用して構築され、64 のバッファー サイズを使用します。要求は、本文にいくつかのデータを含む HTTP 要求です。 .
PostMan 経由で接続する場合、リクエストはチャンクの束に分割され、BeginRecieve() が複数回呼び出され、毎回 64B を受信して約 2 ミリ秒かかります。64B未満を受け取る最後のものを除いて。
しかし、HttpWebRequest を使用してクライアントに接続すると、最初の BeginRecieve() コールバックは 64B を受信して約 1 ミリ秒かかり、次は 47B のみを受信して約 200 ミリ秒かかり、最後に 3 番目は約 58B を受信して 2 ミリ秒かかります。
2 番目の BeginRecieve はどうなっていますか? HttpWebRequest 入力ストリームへのデータの書き込みを開始するとすぐに接続が確立されますが、GetResponse() を呼び出すまでデータの受信は開始されません。
ここに私の HttpWebRequest コードがあります:
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = verb;
request.Timeout = timeout;
request.Proxy = null;
request.KeepAlive = false;
request.Headers.Add("Content-Encoding", "UTF-8");
System.Net.ServicePointManager.Expect100Continue = false;
request.ServicePoint.Expect100Continue = false;
if ((verb == "POST" || verb == "PUT") && !String.IsNullOrEmpty(data))
{
var dataBytes = Encoding.UTF8.GetBytes(data);
try
{
var dataStream = request.GetRequestStream();
dataStream.Write(dataBytes, 0, dataBytes.Length);
dataStream.Close();
}
catch (Exception ex)
{
throw;
}
}
WebResponse response = null;
try
{
response = request.GetResponse();
}
catch (Exception ex)
{
throw;
}
var responseReader = new StreamReader(rStream, Encoding.UTF8);
var responseStr = responseReader.ReadToEnd();
responseReader.Close();
response.Close();
私は何を間違っていますか?Web ブラウザーからの HTTP 要求とは異なる動作をするのはなぜですか? これにより、実質的に 200 ミリ秒の遅延がアプリケーションに追加されます。