Настройка максимального размера сообщения и буфера для WCF webhttp
Вопрос
В настоящее время у меня есть служба WCF с привязками webHttp, я пытаюсь увеличить максимальный размер, который можно ввести в службу, переопределяя настройки по умолчанию в конфигурации, я пробовал сделать что-то вроде
<system.serviceModel>
<bindings>
<webHttpBinding>
<binding name="webHttp" >
<security mode="Transport">
<transport clientCredentialType =
"None"
proxyCredentialType="None"
realm="string" />
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="PrimeStreamInfoServices.Service1" behaviorConfiguration="PrimeStreamInfoServices.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address="" binding="webHttpBinding" contract="PrimeStreamInfoServices.IService1">
<!--
Upon deployment, the following identity element should be removed or replaced to reflect the
identity under which the deployed service runs. If removed, WCF will infer an appropriate identity
automatically.
-->
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="PrimeStreamInfoServices.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<diagnostics>
и установка различных других свойств, относящихся к размеру сообщения, но, похоже, ни одно из них не работает, можно ли вообще изменить размер сообщения привязки webHttp?Какие-либо предложения?Спасибо!
Решение
Существует множество настроек, которые могут влиять на ваши настройки — попробуйте следующее:
<bindings>
<webHttpBinding>
<binding name="LargeWeb"
maxBufferPoolSize="1500000"
maxReceivedMessageSize="1500000"
maxBufferSize="1500000">
<readerQuotas
maxArrayLength="656000"
maxBytesPerRead="656000"
maxDepth="32"
maxNameTableCharCount="656000"
maxStringContentLength="656000"
/>
</binding>
</webHttpBinding>
</bindings>
Определив свою «версию» webHttpBinding и установив для всех этих параметров более высокие значения, вы сможете пройти через любой размер сообщения (почти).
Имейте в виду:это открывает вашу систему для потенциального переполнения огромными сообщениями и, таким образом, ставит ее на колени (классические атаки типа «отказ в обслуживании») - вот почему эти ограничения установлены довольно низкими - намеренно и намеренно.
Вы можете изменить их на более высокие значения — просто помните, что вы делаете, и каковы риски безопасности, если вы это сделаете!
Марк
ПС:Чтобы использовать эти настройки, вам, конечно, необходимо ссылаться на эту конфигурацию привязки в конфигурациях вашего сервера и клиента:
<client>
<endpoint address="http://localhost"
binding="webHttpBinding" bindingConfiguration="LargeWeb"
contract="IMyService" />
</client>
<services>
<service>
<endpoint address="http://localhost"
binding="webHttpBinding" bindingConfiguration="LargeWeb"
contract="IMyService" />
</service>
</services>
Другие советы
Настройка максимального размера сообщения и буфера для служб WCF Rest webhttpbinding
<bindings>
<webHttpBinding>
<binding maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="200" maxStringContentLength="83886089" maxArrayLength="163841" maxBytesPerRead="2147483647" maxNameTableCharCount="16384"/>
</binding>
</webHttpBinding>
</bindings>