Я пытаюсь сделать несколько идентичных запросов к веб-службе 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.