WCF постраничные результаты и экспорт данных - PullRequest
3 голосов
/ 14 апреля 2010

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

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

Это возвращает меня к вопросу о максимальном размере сообщения. Каков рекомендуемый подход для этого типа установки?

В настоящее время мы используем wsHttpBinding ...

Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010

Я бы, наверное, сделал что-то подобное в вашем случае

  • создайте службу с помощью метода «постраничного» GetData (), где вы задаете индекс страницы и размер страницы в качестве дополнительных параметров. Это должно дать вам хороший чистый интерфейс для «регулярного» использования, и это не должно выходить за пределы maxMessageSize

  • создайте вторую службу (или метод), которая будет отправлять все данные - в идеале, вы можете связать их в ZIP-файл или что-то на сервере перед отправкой. Если этот ZIP-файл все еще слишком велик, вы можете проверить потоковую передачу WCF для обработки больших файлов, как уже указывал Энди

Функция maxMessageSizeLimit установлена ​​по уважительной причине: чтобы избежать атак типа «отказ в обслуживании», когда служба WCF просто наполняется большими сообщениями и, таким образом, ставится на колени. Если вы можете, всегда старайтесь помнить об этом, а не просто поднимите maxMessageSize до 2 ГБ - это может снова укусить вас: -)

2 голосов
/ 14 апреля 2010

Я думаю, что для больших файлов рекомендуется использовать потоковую передачу WCF. Я не уверен в точных деталях вашего сценария, но вы могли бы взглянуть на это как на отправную точку:

http://msdn.microsoft.com/en-us/library/ms789010.aspx

...