Превышена максимальная квота размера сообщений для входящих сообщений (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 в соответствующем элементе привязки.
Ответы
Ответ 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, значительно меньше по сравнению с кодировкой текстовых сообщений.