2016-03-07 4 views
0

Я всегда думал, что вариант WCF BasicHttpBinding MaxBufferSize предназначен, чтобы защитить меня от атак DoS, однако, следующее примечание в documentation странно:Недвижимость MaxBufferSize?

Если сообщение превышает максимальное значение, установленное для буфера, он не отбрасывается. Вместо этого из кучи CLR запрашивается больше памяти, и это наносит больше лишних затрат на сбор мусора, чем использование буферов.

Так это выглядит как свойство MaxBufferSize больше значения по умолчанию и не MaxBufferSize. Я что-то пропустил?

+1

Ну, он делает то, что он подразумевает. Это самый большой кусок, который ваше приложение будет принимать, пакеты могут быть меньше, что-то большее в размерах <размер вставки здесь> куски – BugFinder

+0

Что такое «пакет»? В итоге в моей службе вызывается метод и он получает сразу все параметры. Никакой концепции «пакетов» больше ... так что вся память должна быть выделена одновременно. Или MaxBufferSize подходит только для потоковых контрактов? –

+0

подумайте об этом как о способе настройки вашего приложения. Как говорится, запросы по размеру maxbuffer не отбрасываются, например, если вы установили его в 5k, а кто-то отправит вам 1gb, вы получите 200 (иш) кусков, которые имеют большие накладные расходы, чем если вы установите свой максимальный буфер на 1gb (хорошо, некоторые преувеличения продолжаются) «пакет» будет запросом наверняка? – BugFinder

ответ

3

Нашли ответ, спасибо BugFinder за подсказку в правильном направлении.

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

+0

Я использую службу C# wcf в своем приложении java, когда я настраиваю этот MaxBufferSize –