Какова цель MaxReceivedMessageSize на стороне клиента?
Я сделал тест на сервере WCF, где ответ от сервера превышает MaxRecievedMessageSize
свойство, определенное в объекте привязки на стороне клиента, в результате чего CommunicationException
, Я изучил запрос и ответ, используя Fiddler. Несмотря на превышение MaxRecievedMessageSize
, весь ответ отправляется клиенту.
Я считаю, что я упускаю суть этого поведения. На мой взгляд, пропускная способность не сохраняется, поскольку данные уже получены. Клиентское приложение могло обработать данные, но привязка клиента была отброшена до того, как она была передана приложению.
Если сохранение полосы пропускания не является целью MaxReceivedMessageSize на стороне клиента, для чего он нужен?
1 ответ
Ответ прост: безопасность.
Действительно, для пропускной способности было бы лучше, если бы ваш клиент мог сказать серверу: "О, кстати, не беспокойтесь о том, чтобы отправлять мне ответы размером более X байт", но это то, что они не реализовали:-)
И даже если бы это было так, что, если на сервере есть ошибка или умышленное неправильное поведение... Что если сервер вернул строку размером 2 ТБ? Затем ваш клиент попытается выделить буфер размером 2 ТБ для получения запроса и, вероятно, получит исключение OutOfMemoryException. Это обидит вашего клиента.