Читатель WCF Настройки квот - недостатки? - PullRequest
27 голосов
/ 07 мая 2009

Если служба WCF возвращает байтовый массив в своем ответном сообщении, существует вероятность того, что длина данных по умолчанию превысит 16384 байта. Когда это происходит, исключением будет что-то вроде

Максимальная квота длины массива (16384) был превышен при чтении XML данные. Эта квота может быть увеличена на изменение свойства MaxArrayLength на XmlDictionaryReaderQuotas объект, используемый при создании XML читатель.

Весь совет, который я видел в Интернете, - просто увеличить настройки элемента <readerQuotas> до максимума, что-то вроде

<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
              maxArrayLength="2147483647" maxBytesPerRead="2147483647"
              maxNameTableCharCount="2147483647" />

на сервере и аналогичные на клиенте.

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

Спасибо!

Ответы [ 2 ]

33 голосов
/ 07 мая 2009

Основным недостатком является потенциальная уязвимость к атакам - например, злонамеренный источник теперь может заполнить ваш веб-сервер сообщением размером до 2 ГБ и потенциально привести к его снижению.

Конечно, разрешение сообщений 2 ГБ также создает некоторую нагрузку на ваш сервер с точки зрения потребления памяти, поскольку эти сообщения должны быть собраны в памяти полностью (если вы не используете потоковые протоколы в WCF). Если у вас есть 10 клиентов, отправляющих вам сообщения размером 2 ГБ, вам понадобится много оперативной памяти на вашем сервере! : -)

Кроме этого, я не вижу никаких реальных проблем.

Марк

8 голосов
/ 23 февраля 2011

В MSDN есть статья, в которой объясняются различные аспекты безопасности, которые необходимо учитывать при установке этих значений. Некоторые атаки типа «отказ в обслуживании» - это атаки, которые поглощают вашу память, и некоторые из них (например, неправильная установка MaxDepth) могут вызвать фатальные исключения StackOverflowException, которые могут привести к остановке сервера в одном запросе.

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

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