私は、必要に応じてリクエストを理想的にパイプライン処理する HTTP クライアントに取り組んでいます。また、要求は特定のネットワーク インターフェイスで送信されます (クライアントはマルチホームです)。
非同期ソケットが使用され、リクエストを行うために、次のコードを使用します。
Uri url = new Uri(reqUrl);
ServicePoint sp = ServicePointManager.FindServicePoint(url);
sp.BindIPEndPointDelegate = new BindIPEndPoint(localBind);
pseg.req = (HttpWebRequest)HttpWebRequest.Create(url);
pseg.req.AddRange("bytes", psegStart, psegStart + psegLength - 1);
pseg.req.KeepAlive = true;
pseg.req.Pipelined = true;
このコードを使用して作成されたリクエストごとに、サーバーへの個別の接続が開かれ、セグメントが並行して受信されます。これは問題ありませんが、私が望む動作ではありません。要求をパイプライン処理したいのですが、応答は順番に到着するようにします。ロックを使用するか、接続制限を 1 に設定すると、セグメント #1 が完全に受信されるまで、セグメント #2 の要求は送信されません。
私が望むものを達成し、引き続き HttpWebRequest/Response-classes を使用する方法はありますか? または、ソケットにドロップダウンする必要がありますか?