Я полагаю, что причина, по которой значение по умолчанию для maxMessageSize является настолько низким, заключается в снижении риска DoS-атак.
Если ответные сообщения большие, то для конфигурации client требуется увеличение maxMessageSize. Для клиента DoS вряд ли представляет риск, поэтому безопасно увеличить его до очень большого значения.
Но это не «взвинчивание maxMessageSize и надежда на лучшее» - вы должны решить, какой максимальный размер будет для вашего приложения, принимая во внимание, решите ли вы использовать пейджинг или настроить его соответствующим образом.
На сервере maxMessageSize должно быть достаточно большим для максимально разрешенного запроса сообщения. Здесь DoS является потенциальной проблемой, хотя в некоторых средах (например, в интрасети), вероятно, безопасно использовать очень большое значение.
Если ваша служба предоставляет операцию, которая позволяет клиенту запрашивать потенциально большой набор данных, альтернативный подход к поисковому вызову состоит в определении максимального количества элементов, которые клиент может запросить за один вызов.
Например, у вас может быть операция, которая позволяет клиенту запрашивать курсы валют для списка валют и диапазона дат:
public IList<ExchangeRate> GetExchangeRates(string baseCurrency, IList<string> currencies, DateTime startDate, DateTime endDate);
Затем вы можете установить ограничение на количество результатов, которое будет возвращать ваша служба, и предоставить это клиенту:
public int GetMaximumResultCount();
После этого клиент должен будет запросить GetMaximumResultCount
и убедиться, что:
(endDate - startDate).TotalDays * currencies.Count < maximumResultCount
Если клиент не соблюдает это, сервер выбрасывает подходящий FaultException