WCF MaxReceivedMessageSize: превышена максимальная квота на размер сообщения

Я получаю эту ошибку:

Максимальная квота размера сообщения для входящих сообщений (65536) была превышены. Чтобы увеличить квоту, используйте MaxReceivedMessageSize свойство в соответствующем связывающем элементе.

Как увеличить это значение в клиентском приложении WCF или серверном приложении и, если возможно, пример того, как это делается?

Ответ 1

Вы увеличиваете его на стороне клиента в app/web.config:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="WSBigQuotaConfig" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2097152" maxBufferPoolSize="524288" maxReceivedMessageSize="2097152" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="2097152" maxArrayLength="2097152" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
                    <message clientCredentialType="UserName" algorithmSuite="Default"/>
                </security>
            </binding>
      </basicHttpBinding>
  </bindings>

  <client>
      <endpoint 
          address="http://example.com/endpoint.svc"
          binding="basicHttpBinding"
          bindingConfiguration="WSBigQuotaConfig"
          contract="ISomeServiceContract" />
  </client>
</system.serviceModel>

Ответ 2

Вам нужно установить атрибут MaxReceivedMessageSize в настройке привязки. По умолчанию это 65536. Я предполагаю, что вы используете наборы данных или что-то в этом роде, которые в конечном итоге становятся довольно большими (главным образом потому, что они обычно представлены XML).

Хорошей новостью является то, что я думаю, что вам нужно изменить это только в своей конфигурации клиента. Посмотрите ниже.

<bindings>
   <netTcpBinding>
      <binding name="MyTcpBinding"
               maxReceivedMessageSize="2000000"/>
   </netTcpBinding>
<bindings>

Ответ 3

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding_Username" maxReceivedMessageSize="20000000"          maxBufferPoolSize="20000000">
      <security mode="TransportWithMessageCredential">
        <message clientCredentialType="UserName" establishSecurityContext="false"/>
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<client>
  <endpoint
            binding="wsHttpBinding"
            bindingConfiguration="wsHttpBinding_Username"
            contract="Exchange.Exweb.ExchangeServices.ExchangeServicesGenericProxy.ExchangeServicesType"
            name="ServicesFacadeEndpoint" />
</client>