Стоит задача отправить сервису довольно солидный кусок текста, который с настройками по умолчанию однозначно вызовет исключение на тему слишком большого размера (QuotaExceededException или как там его...). Хочу перед отправкой узнать, какого размера сообщение сервис в принципе готов принять, дабы выдать пользователю предупреждение, ежели чего. Отсюда вопрос: а как правильно этот размер узнать?
Пробовал нечто вроде такого:
int maxStringLength = 0;
...
XmlDictionaryReaderQuotas quotas = serviceClient.Endpoint.Binding.GetProperty<XmlDictionaryReaderQuotas>(
new System.ServiceModel.Channels.BindingParameterCollection();
if (quotas != null)
{
maxStringLength = quotas.MaxStringContentLength;
}
Проблема в том, что мне все время возвращается дефолтное значение 8192 вместо того, которое я указал в конфиге сервиса. Кстати, биндинг для сервиса выглядит вот так:
код
<bindings>
<wsHttpBinding>
<binding name="HttpBinding" messageEncoding="Mtom">
<readerQuotas maxStringContentLength="32768"/>
<reliableSession enabled="true" />
<security mode="None" />
</binding>
</wsHttpBinding>
</bindings>
В общем, уперся, нуждаюсь в помощи
Есть мнение, что нет такой информации у клиента и не может быть в принципе. Поэтому и возвращается дефолтное значение. Тут уж либо сервис примет запрос либо обрубит. Но доказать ссылками это не могу, утвержаю лишь исходя из своего понимания WCF.
Здравствуйте, KaKaDu, Вы писали:
KKD>Стоит задача отправить сервису довольно солидный кусок текста, который с настройками по умолчанию однозначно вызовет исключение на тему слишком большого размера (QuotaExceededException или как там его...). Хочу перед отправкой узнать, какого размера сообщение сервис в принципе готов принять, дабы выдать пользователю предупреждение, ежели чего. Отсюда вопрос: а как правильно этот размер узнать?
Можно сделать как-то так:
Создать отдельный метод в контракте, который будет возвращать размер.
Использовать streaming.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>