Несколько идентичных веб-запросов - PullRequest
0 голосов
/ 16 марта 2012

Я пытаюсь сделать несколько идентичных запросов к веб-службе REST.Проблема, с которой я сталкиваюсь, заключается в том, что для каждого запроса открывается новый сокет, что делает операцию намного более медленной (~ x10).(по сравнению с той же операцией с использованием прокси-канала SOAP).

Я изучил HttpWebRequest.KeepAlive, но не могу вызвать 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, и составляет ~ 300 КБ.

EDIT2: я провел еще несколько тестов:

onмаленькие объекты, например: 100 байт REST превосходит SOAP (~ 2 до 1), но на больших объектах (объекты с большими байтовыми массивами изображений) SOAP намного быстрее.

Еще одна странная вещь - когда я закомментируюстрока var test = (Test)dcs.ReadObject(stream); в цикле REST, производительность фактически снижается: S.

1 Ответ

0 голосов
/ 16 марта 2012

Закройте первый ответ, прежде чем открывать новый.Пожалуйста, рассмотрите возможность поставить GetXYZ() внутри оператора using.KeepAlive по умолчанию true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...