WCF Streaming и maxReceivedMessageSize
Почему свойство maxReceivedMessageSize актуально при реализации потоковой передачи WCF? Поскольку буферизация и постоянство обрабатываются потребителем потока, почему WCF заботится о том, насколько большой или длительной может быть операция одной службы?
Я работаю над проектом, который может обрабатывать большие файлы с сервера на клиент и обратно. Я полагал, что потоковая передача WCF является отличным выбором, так как ДОЛЖНА учитывать теоретически бесконечные размеры файлов. И на моем клиенте, и на сервере для TransportMode (в привязке) установлено значение "Потоковый", а сообщения предназначены для потоков. Однако этого недостаточно, поскольку я получаю сообщение CommunicationException, указывающее, что мне нужно увеличить свойство maxReceivedMessageSize. Следуя совету исключения, увеличение свойства волшебным образом позволяет всем работать идеально.
Я обеспокоен тем, что WCF заставляет меня "ограничивать" объем, который может обрабатывать мой сервис / клиент, даже если потоковая передача должна быть "бесконечной". Если появляется файл, размер которого превышает конфигурацию моей привязки, возникает то же исключение CommunicationException. Я не понимаю, почему WCF произвольно ограничивает мою способность обрабатывать большие файлы, "когда" и "как" я отправляю и храню эти файлы, теперь это "мое" дело, потому что у меня есть поток для потребления, как я хочу.
Я что-то пропустил?
1 ответ
Согласно документации (по крайней мере, я обнаружил), причиной того, что вы "вынуждены" ограничить размер вашего сообщения, является безопасность, в основном, чтобы избежать DoS-атак, отправляя слишком большие сообщения и наводняя систему.
В качестве защитного механизма maxReceivedMessageSize ограничивает максимально допустимый размер сообщений при получении. Значение по умолчанию maxReceivedMessageSize составляет 64 КБ, что обычно слишком мало для сценариев потоковой передачи. Источник
Максимальный размер для maxReceivedMessageSize составляет 9 223 372 036 854 775 807 байт.
Надеюсь это поможет.