Изучаю как работает Pipelining с помощью HttpWebRequest. Но что-то никак не могу заставить его работать:
var req1 = (HttpWebRequest)WebRequest.Create("http://vm-2008r2-07:16666/Handler.ashx?first-delay=1s&ticks=10&pattern-size=16&r=1");
Console.WriteLine("SupportsPipelining 1: {0}", req1.ServicePoint.SupportsPipelining);
var resp1 = Task.Factory.FromAsync(
req1.BeginGetResponse,
ar => req1.EndGetResponse(ar),
null
);
// (1) wait for response to be ensure that client known server supports pipelining
resp1.Wait();
var req2 = (HttpWebRequest)WebRequest.Create("http://vm-2008r2-07:16666/Handler.ashx?first-delay=1s&ticks=10&pattern-size=16&r=2");
Console.WriteLine("SupportsPipelining 2: {0}", req2.ServicePoint.SupportsPipelining);
var resp2 = Task.Factory.FromAsync(
req2.BeginGetResponse,
ar => req2.EndGetResponse(ar),
null
);
Task.WaitAll(new Task[] { resp1, resp2 });
Console.WriteLine("Pipelined: {0}, {1}", req1.Pipelined, req2.Pipelined);
Выхлоп:
SupportsPipelining 1: True
SupportsPipelining 2: True
Pipelined: True, True
Press any key to continue . . .
Тем не менее Wireshark показывает 2 TCP сессии. Follow TCP stream показывает каждый запрос по отдельности.
Пробовал коментировать (1), но не помогло.
Ответ сервера (второй такой же):
GET /Handler.ashx?first-delay=1s&ticks=10&pattern-size=16&r=1 HTTP/1.1
Host: vm-2008r2-07:16666
Connection: Keep-Alive
HTTP/1.1 200 OK
Cache-Control: private
Transfer-Encoding: chunked
Content-Type: text/plain; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 26 Mar 2014 11:28:33 GMT
1140EA48935C89878
З.Ы. В действительности мне нужно
выключить pipelining, а для этого сначала выяснить в каких случаях он сработает. Поэтому ответы типа "используй xxx" мне не помогут.