2014-01-22 2 views
0

Я сделал тест против сервера WCF, где ответ с сервера превышает свойство MaxRecievedMessageSize, определенное в объекте привязки на стороне клиента, в результате чего получается CommunicationException. Я рассмотрел запрос и ответ, используя Fiddler. Несмотря на превышение MaxRecievedMessageSize, весь ответ отправляется клиенту.Какова цель MaxReceivedMessageSize на стороне клиента?

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

Если сохранение пропускной способности не является целью MaxReceivedMessageSize на стороне клиента, для чего это необходимо?

+3

Per [MSDN] (http://msdn.microsoft.com/en-us/library/system.servicemodel.basichttpbinding.maxreceivedmessagesize%28v=vs.100%29.aspx), это ограничение экспозиции DoS-стиля атаки. – Tim

ответ

1

Ответ прост: безопасность.

Было бы лучше использовать пропускную способность, если бы ваш клиент мог сказать серверу: «О, кстати, не беспокойтесь, отправляя мне ответы больше X-байтов», но это то, чего они не реализовали :-)

И даже если бы это было, что, если у сервера есть ошибка или намеренно ошибочно ... Что делать, если сервер вернул строку 2 ТБ? Затем ваш клиент попытается выделить буфер 2 ТБ для получения запроса и, вероятно, получит исключение OutOfMemoryException. Это снизит ваш клиент.

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