Услуги WCF, что лучше, один большой запрос или много маленьких? - PullRequest
1 голос
/ 19 ноября 2010

Я рассматриваю код, в котором у нас возникли проблемы с возвращаемыми данными из веб-службы WCF. В настоящее время служба создает список объектов, сериализует их (как JSON для записи) и возвращает весь сериализованный список по проводам. Очевидно, что при большом количестве данных пользователи сталкиваются с проблемами ограничения квот.

Я подумываю изменить его, чтобы служба возвращала по одному элементу за раз, что отправляло бы цикл запросов в цикле, добавляя по одному объекту за раз до тех пор, пока это не было сделано.

Очевидно, что в первом сценарии мы делаем один запрос к службе, которая потенциально может вернуть огромный объем данных и выполнить их в соответствии с квотой. В другом сценарии мы никогда не используем квоту, но запрашивающее приложение будет запрашивать элемент данных после элемента данных в потоке отдельных запросов.

Чтобы проиллюстрировать это, у нас есть список предметов, которые бывают разных типов, и у них разные ценовые категории. Приложению может потребоваться объединить несколько товаров: клиенты, которым нужен этот товар, типы товаров и цены, запрошенные клиентом, и их может быть, возможно, семьдесят товаров, при этом от пяти до восьмидесяти клиентов запрашивают в среднем 2 типа товара на 1 цена за каждый.

С учетом средних значений в крайнем случае это может сделать 7000 отдельных (очень маленьких) запросов данных за одно завершенное задание. Это проблема? Можно немного упаковать его, чтобы типы клиентов и запрошенные цены могли быть объединены, но потенциально это может быть несколько тысяч запросов одновременно.

Мне лучше с одним огромным потоком данных? Или пара тысяч поменьше?

1 Ответ

2 голосов
/ 19 ноября 2010

Вам лучше с оптимальным размером возврата для вашего сценария :) Это зависит от накладных расходов по запросу.Как правило, чем меньше разговоров с веб-службой, тем лучше.

Шутливый ответ, так вот в чем суть: вам, вероятно, лучше всего использовать какую-то систему подкачки, где ваш запрос запрашивает определенное количествоэлементы, и ваш ответ возвращает "n из m" в результатах.Таким образом, вы можете настроить количество запросов и размер ответа для наилучшего выполнения в вашей ситуации.

...