多个相同的Web请求

时间:2012-03-16 16:32:14

标签: c# rest httpwebrequest

我正在尝试向REST Web服务发出多个相同的请求。我遇到的问题是,对于每个请求,似乎打开了一个新的套接字,这使得操作更多更慢(~x10)。 (与使用SOAP代理通道的相同操作进行比较时)。

我已经研究过HttpWebRequest.KeepAlive,但是我不能多次在同一个Web请求上调用GetResponse()。

下面的这个片段是我需要的想法,是的,我知道它不会起作用,因为我上面提到的原因:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(serviceUri);
req.KeepAlive = true;

var dcs = new DataContractSerializer(typeof(Test));

while (enabled)
{
    var stream = req.GetResponse().GetResponseStream();                

    if (stream != null)
    {
        var test = (Test)dcs.ReadObject(stream);
        counter++;
    }
}

编辑:这是我用于SOAP测试的循环:

private void SoapLoop()
{
    IService1 proxy =
        ChannelFactory<IService1>.CreateChannel(
            tcpBinding, endpointAddress);



     while (enabled)
     {
         var test = proxy.GetRead(new GetReadRequest());
         counter++;
     }

}

我传输的对象在SOAP和REST中是相同的,大约是300KB。

EDIT2:我做了一些进一步的测试:

关于小对象,例如:100字节REST优于SOAP(~2比1),但对于大对象(具有大图像字节数组的对象),SOAP速度要快得多。

另一个奇怪的事情是,当我在REST循环中注释掉行var test = (Test)dcs.ReadObject(stream);时,性能实际上会下降:S。

1 个答案:

答案 0 :(得分:0)

在打开新响应之前关闭第一个响应。请考虑将GetXYZ()放入using语句中。 <{1}}默认为KeepAlive