Подтвердить что ты не робот

Превышена максимальная квота размера сообщений для входящих сообщений (65536)

Я получаю это исключение, создавая область для нескольких таблиц, все эти таблицы огромны в дизайне

<bindings>
    <wsHttpBinding>
        <binding name="wsHttpBinding_ISyncServices" closeTimeout="00:10:00"
            openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
            transactionFlow="false" hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
            <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
            <reliableSession ordered="true" inactivityTimeout="00:10:00"
                enabled="false" />
            <security mode="Message">
                <transport clientCredentialType="Windows"
                    proxyCredentialType="None" realm="">
                    <extendedProtectionPolicy policyEnforcement="Never" />
                </transport>
                <message clientCredentialType="Windows"
                    negotiateServiceCredential="true" algorithmSuite="Default" />
            </security>
        </binding>
    </wsHttpBinding>
</bindings>

Я сделал MaxReceivedMessageSize до 2147483647 но все же это дает мне ниже исключения в этой строке

 client.GetTableDescription(scopeName, syncTable)

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

4b9b3361

Ответ 1

По ответ на этот вопрос

Вам нужно что-то вроде этого:

<bindings>
     <basicHttpBinding>
         <binding name="basicHttp" allowCookies="true"
 maxReceivedMessageSize="20000000"
 maxBufferSize="20000000"
 maxBufferPoolSize="20000000">
             <readerQuotas maxDepth="32"
 maxArrayLength="200000000"
 maxStringContentLength="200000000"/>
         </binding>
     </basicHttpBinding> </bindings>

Пожалуйста, также читайте комментарии к принятому отвечу, содержащим ценный вклад.

Ответ 2

Вам также необходимо увеличить maxBufferSize. Также обратите внимание, что вам может потребоваться увеличить readerQuotas.

Ответ 3

Вам нужно внести изменения в конфигурацию привязки (в файле app.config) на SERVER и CLIENT, или она не вступит в силу.

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding maxReceivedMessageSize="2147483647 " max...=... />
        </basicHttpBinding>
       </bindings>
</system.serviceModel>

Ответ 4

Если вы используете CustomBinding, вам нужно будет внести изменения в элемент httptransport. Установите его как

<customBinding> <binding ...> ... <httpsTransport maxReceivedMessageSize="2147483647"/> </binding> </customBinding>

Ответ 5

Это сработало для меня:

 Dim binding As New WebHttpBinding(WebHttpSecurityMode.Transport)
 binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None
 binding.MaxBufferSize = Integer.MaxValue
 binding.MaxReceivedMessageSize = Integer.MaxValue
 binding.MaxBufferPoolSize = Integer.MaxValue

Ответ 6

Внесение изменений в config не помогло мне. После хорошо отработанных темпов

private YourAPIClient GetClient()
    {
        Uri baseAddress = new Uri(APIURL);
        var binding = new BasicHttpBinding();
        binding.MaxReceivedMessageSize = 20000000;
        binding.MaxBufferSize = 20000000;
        binding.MaxBufferPoolSize = 20000000;
        binding.AllowCookies = true;
        var readerQuotas = new XmlDictionaryReaderQuotas();
        readerQuotas.MaxArrayLength = 20000000;
        readerQuotas.MaxStringContentLength = 20000000;
        readerQuotas.MaxDepth = 32;
        binding.ReaderQuotas = readerQuotas;
        if (baseAddress.Scheme.ToLower() == "https")
            binding.Security.Mode = BasicHttpSecurityMode.Transport;
        var client = new YourAPIClient(binding, new EndpointAddress(baseAddress));
        return client;
    }

Ответ 7

Моим решением было использовать параметр "-OutBuffer 2147483647" в моем запросе, который является частью общих параметров. PS C: > Get-Help about_CommonParameters -Full

Ответ 8

Для меня настройки в web.config/app.config были проигнорированы. В итоге я создал свою привязку вручную, что решило проблему для меня:

var httpBinding = new BasicHttpBinding()
{
    MaxBufferPoolSize = Int32.MaxValue,
    MaxBufferSize = Int32.MaxValue,
    MaxReceivedMessageSize = Int32.MaxValue,
    ReaderQuotas = new XmlDictionaryReaderQuotas()
    {
        MaxArrayLength = 200000000,
        MaxDepth = 32,
        MaxStringContentLength = 200000000
    }
};

Ответ 9

Вы можете частично решить эту проблему, используя также кодирование сообщений MTOM (Механизм оптимизации передачи сообщений). Механизм кодирования сообщений по умолчанию в WCF - это текст, который base64 кодирует данные, кодировка Base64 увеличивает размер сообщения примерно на 33%.

MTOM не кодирует данные base64. Это также означает, что дополнительные издержки обработки для кодирования base64 и декодирования данных удаляются. Следовательно, MTOM может значительно улучшить общую производительность передачи сообщений.

При кодировании текстовых сообщений двоичные данные кодируются в формате base64 и встраиваются в конверт SOAP. В MTOM двоичные данные включаются в качестве вложения MIME (многоцелевого расширения почты Интернета).

Это можно настроить следующим образом в конфигурационном файле.

<bindings>
  <wsHttpBinding>
    <binding name="wsHttp" messageEncoding="Mtom"
             maxReceivedMessageSize="700000">
      <readerQuotas maxArrayLength="700000"/>
    </binding>
  </wsHttpBinding>
</bindings>

Вы можете сравнить и увидеть, что байты, полученные с помощью MTOM, значительно меньше по сравнению с кодировкой текстовых сообщений.