Выяснение необходимого MaxReceivedMessageSize в WCF с NetTcpBinding - PullRequest
3 голосов
/ 23 марта 2010

Я использую NetTcpBinding в WCF и хочу отправить поток, размер которого не превышает 1 МБ. Я установил для MaxReceivedMessageSize действительно большое число, и это, конечно, работает нормально.

Но мне любопытно:

Имеет ли установка MaxReceivedMessageSize очень высокое число какое-либо (отрицательное) влияние или было бы полезно установить его чуть выше размера, который я действительно хочу отправить / получить?

Какие издержки можно ожидать при использовании NetTcpBinding для передачи потока? Значение: когда я отправляю поток размером 1 МБ, насколько большим должен быть мой MaxReceivedMessageSize?

Ответы [ 2 ]

3 голосов
/ 23 марта 2010

Если вы хотите отправить файл размером 1 МБ на сервер, значение maxReceivedMessageSize на сервере должно быть не менее 1 МБ (независимо от того, рассчитываете ли вы его как 1 миллион байт или 10 до степени 20 =) 1'048'576).

Причина, по которой WCF поддерживает эти значения по умолчанию на низком уровне, заключается в защите вашего сервера от атаки типа "отказ в обслуживании". Если вы разрешите на своем сервере до 1 МБ или 2 МБ maxReceivedMessageSize, злоумышленник может попытаться заполнить ваш сервер строкой запросов, максимально увеличивающих этот размер, и, таким образом, в конечном итоге привести к нехватке памяти на вашем сервере.

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

2 голосов
/ 23 марта 2010

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

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

Некоторые люди могут отличаться, но, на мой взгляд, 1Mb = 1048576 байт (1024 * 1024). Я также добавил бы буфер для непредвиденных ситуаций, такой как конверт сообщения. Таким образом, 1048576 + 1024 = 1049600 может показаться приемлемым размером для ожидаемого сообщения 1 МБ.

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