Как увеличить MaxReceivedMessageSize при вызове WCF из С#
Возможный дубликат:
Превышена максимальная квота размера сообщений для входящих сообщений (65536)
Я использую WCF для загрузки и загрузки файлов. загрузка выполняется успешно, но когда я загружаю большой файл, я нашел эту ошибку
Ошибка: максимальная квота размера сообщения для входящих сообщений (65536) был превышен. Чтобы увеличить квоту, используйте Свойство MaxReceivedMessageSize для соответствующего элемента привязки.
Мой файл Service.config имеет следующий код.
<system.web>
<compilation debug="true" />
<httpRuntime executionTimeout="4800" maxRequestLength="2147483647" />
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="524288">
<readerQuotas maxDepth="32" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
<!--<webHttpBinding>
<binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
</webHttpBinding>-->
</bindings>
<services>
<service name="WITSService.WITSService">
<clear />
<endpoint binding="basicHttpBinding" contract="WITSService.WITSService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="myEndPointBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483646"/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
может ли кто-нибудь помочь мне, как увеличить MaxReceivedMessageSize
Ответы
Ответ 1
Измените customBinding в файле web.config, чтобы использовать большие значения по умолчанию. Я выбрал 2 МБ, так как это разумный размер. Разумеется, установка его на 2 ГБ (как подскажет ваш код) будет работать, но это делает вас более уязвимыми для атак. Выберите размер, который больше, чем ваш самый большой запрос, но не слишком большой.
Проверьте это: Использование запросов больших сообщений в Silverlight с WCF
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="TestLargeWCF.Web.MyServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="customBinding0">
<binaryMessageEncoding />
<!-- Start change -->
<httpTransport maxReceivedMessageSize="2097152"
maxBufferSize="2097152"
maxBufferPoolSize="2097152"/>
<!-- Stop change -->
</binding>
</customBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<services>
<service behaviorConfiguration="Web.MyServiceBehavior" name="TestLargeWCF.Web.MyService">
<endpoint address=""
binding="customBinding"
bindingConfiguration="customBinding0"
contract="TestLargeWCF.Web.MyService"/>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
Ответ 2
Вам нужно установить basicHttpBinding → MaxReceivedMessageSize в конфигурации клиента.