пятница, 11 декабря 2009 г.

WCF: предельный размер входного потока данных для сервера (À la MaxReceivedMessageSize итд)

Половина сегоднешнего дня была потрачена на достаточно простой вопрос: почему возникает ошибка при общении .Net клиента с сервером через WCF при потоке данных более примерно 2MB.

Как клиент так и сервер казались правильно сконфигурированными по ограничениям:

Клиент
moWsHttpBinding = New WSHttpBinding(System.ServiceModel.SecurityMode.None) moWsHttpBinding.MaxReceivedMessageSize = Integer.MaxValue
moWsHttpBinding.ReaderQuotas.MaxArrayLength = Integer.MaxValue
moWsHttpBinding.ReaderQuotas.MaxStringContentLength = Integer.MaxValue
moWsHttpBinding.MessageEncoding = WSMessageEncoding.Mtom
moWsHttpBinding.ReaderQuotas.MaxBytesPerRead = Integer.MaxValue
moWsHttpBinding.ReaderQuotas.MaxNameTableCharCount = Integer.MaxValue
moWsHttpBinding.UseDefaultWebProxy = False
moWsHttpBinding.BypassProxyOnLocal = True
moWsHttpBinding.ReceiveTimeout = New TimeSpan(20, 0, 0)
moWsHttpBinding.SendTimeout = New TimeSpan(20, 0, 0)


Сервер (web.config - пропуская некоторые детали того как они взаимосвязаны)
<wsHttpBinding>
<binding name="NoneBind" messageEncoding="Mtom" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

<security mode="None" />

</binding>
</wsHttpBinding>


... и как всегда ответ был прост и лежал вне данного кода (и является хорошо мне известным по опыту разработки asp.net приложений): необходимо добавить в web.config следующее:
<system.web>
<httpRuntime maxRequestLength="131072"/>
</system.web>

для увеличения лимита входного потока для сервера до примерно 128MB.



при этом я конечно немного удивлён, что все остальные установки WCF не позволяют преодолеть по умолчанию данное элементарное ограничение.

Комментариев нет: