2009-03-12 5 views
3

Что бы наилучшей практики для следующего сценария:Наилучшая практика для запросов и службы WCF

There's сетку, которая будет заполнена, и должны быть изменены в соответствии с каждой строки. Например, есть сетка, заполненная продуктами, тогда согласно каждому продукту один из столбцов будет динамически заполнен. Лучше ли возвращать из службы всю таблицу продуктов и запрашивать ее на стороне клиента или иметь метод службы, который будет возвращать только необходимые данные? Последнее означало бы, что если в сетке будет n количество продуктов, будет n запросов к этому методу службы.

Моя дилемма заключается в том, что для некоторых пользователей таблица будет относительно небольшой, и отправка ее клиенту может быть не большой, но у других пользователей есть значительное количество строк, которые будут возвращены (более 15 тыс.).

Спасибо за понимание, которое вы можете принести.

ответ

0

Я бы предложил создать какой-то ViewModel на сервере, чтобы адаптировать данные для клиента. Это похоже на ваш второй вариант; однако это не делается по строкам подряд. Это пакетная операция на стороне сервера, которая поддерживает столбцы, чтобы представление не нуждалось в какой-либо специальной логике.

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

Удачи.

3

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

Используя что-то подобное, вы должны найти хороший баланс между количеством выполненных вызовов и размером данных, которые будут подаваться в каждом запросе.

0

Похоже, что латентность сети является проблемой здесь. Если у вас есть 100 продуктов и (скажем) время в оба конца в 0,2 с, это составляет 20 секунд, чтобы загрузить все данные. Минимизируйте свои сервисные звонки как можно больше и, если необходимо, переназначите данные в более подходящую структуру вашего клиента.

Редактировать: Еще одна идея, если это возможно в вашей ситуации, заключается в сжатии данных между вашим клиентом и сервисом. Посмотрите на this forum post. Вы увидите большие выигрыши, если будете нажимать на кучи XML.

1

Тема, на которую вы наткнулись, - обсуждаемая тема granularity на service-oriented architecture. SOA похожа на mystic mammal being discussed by blind men, но на самом деле это не так.

"best practice" Тенденция - крупнозернистые услуги, отход от объектно-ориентированных. Рассмотрите свои услуги для обмена документами, в которые вы вкладываете все, что вам нужно для выполнения.

Как Энди Уайт предположил, что если данные становятся слишком большими, вам понадобится какая-то фильтрация или пейджинг.

Смежные вопросы