Максимальный размер параметра для службы WCF - PullRequest
1 голос
/ 10 декабря 2010

Наличие службы WCF (размещенной в IIS 6.0), которая принимает XML-канал от SAP с потенциально десятками тысяч (или более) записей для обработки.

[OperationContract]
[FaultContractAttribute(typeof (ArgumentException))]
void ProcessSapRoles(XElement SapData);

Меня беспокоит ограничение размеров параметров.Из других статей SO я читаю, что увеличение значения maxRequestLength на httpRuntime в web.config поможет в этом (я уверен, что мне также придется увеличить тайм-аут отправки).Я также читал, что использование NetTcpBinding поможет, хотя я не знаю ограничений для его использования или настройки.

Полагаю, я мог бы сделать так, чтобы вызывающий абонент совершал 100 000 вызовов, по одному на запись, ноЯ думаю, что влияние на производительность будет значительным.Кроме того, с другой стороны, я должен запросить существующие записи, чтобы увидеть, обновляю ли я или добавляю записи, а затем отправить обновления обратно в базу данных.Создание 100 000 наборов данных для 100 000 отдельных запросов по одной записи также кажется утомительным.

До WCF мы использовали приемники сжатия в цепочке удаленного взаимодействия, что значительно повысило производительность (отправка наших самых больших наборов данных осуществлялась по тайм-ауту веб-страницы через 20 минут; после добавления приемника сжатия,наборы данных пересекали провод примерно через 20 секунд) (и заказчик отвечал за создание таких наборов данных, мы не могли их контролировать: P).

Как лучше всего обрабатывать передачу потенциально 100 000 записей, и существует ли какая-либо эквивалентная концепция приемника сжатия для WCF?

TIA!Джеймс

Ответы [ 2 ]

1 голос
/ 10 декабря 2010

Службы WCF ограничены размером параметра в 64 КБ - по умолчанию.Это по веской причине - у службы должен быть буфер (или, возможно, несколько буферов для одновременных абонентов) такого размера, и если этот размер будет слишком большим, можно довольно легко заполнить сервер поддельными огромными запросами ипоставить его на колени.Неважно, сколько у вас оперативной памяти - в какой-то момент она исчерпается.

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

1 голос
/ 10 декабря 2010

Рассматривали ли вы использование Streaming in WCF для передачи больших данных?

На заметку, NetTcp абсолютно поможет. Причина в том, что он использует Binary encoding по умолчанию. С другой стороны, Http использует Text encoding по умолчанию, который требует дополнительного пространства.

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