수신 메시지에 대한 최대 메시지 크기 할당량 (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 속성을 사용하십시오.
당 이 질문의 대답
다음과 같은 것을 원할 것입니다.
<bindings> <basicHttpBinding> <binding name="basicHttp" allowCookies="true" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000"> <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/> </binding> </basicHttpBinding> </bindings>
또한 거기에서 받아 들여진 답변에 대한 의견을 읽으십시오. 귀중한 의견이 포함되어 있습니다.
또한 maxBufferSize 를 늘려야 합니다 . 또한 readerQuotas 를 늘려야 할 수도 있습니다 .
SERVER와 CLIENT의 바인딩 구성 (app.config 파일에서)을 변경해야합니다. 그렇지 않으면 적용되지 않습니다.
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding maxReceivedMessageSize="2147483647 " max...=... />
</basicHttpBinding>
</bindings>
</system.serviceModel>
CustomBinding을 사용하는 경우 httptransport 요소를 변경해야합니다. 그것을 다음과 같이 설정하십시오
<customBinding> <binding ...> ... <httpsTransport maxReceivedMessageSize="2147483647"/> </binding> </customBinding>
이것은 나를 위해 일했습니다.
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
구성을 변경해도 도움이되지 않았습니다. 다음은 잘 작동했습니다.
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;
}
내 해결책은 공통 매개 변수의 일부인 내 쿼리에서 "-OutBuffer 2147483647"매개 변수를 사용하는 것이 었습니다. PS C :> Get-Help about_CommonParameters -Full
나를 위해 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
}
};
You can partially solve the issue by using MTOM (Message Transmission Optimization Mechanism) message encoding as well, The default message encoding mechanism in WCF is Text, which base64 encodes data, Base64 encoding bloats the message size by approximately 33%.
MTOM does not base64 encode data. This also means the additional processing overhead to base64 encode and decode data is removed. Hence, MTOM can significantly improve the overall message transfer performance.
With Text Message encoding, the binary data is base64 encoded and it is embedded in the SOAP envelope. With MTOM, binary data is included as a MIME (Multipurpose Internet Mail Extensions) attachment.
It can be configured like this in the config file.
<bindings>
<wsHttpBinding>
<binding name="wsHttp" messageEncoding="Mtom"
maxReceivedMessageSize="700000">
<readerQuotas maxArrayLength="700000"/>
</binding>
</wsHttpBinding>
</bindings>
You can compare and see, the bytes received with MTOM is significantly less when compared with Text message encoding.
'developer tip' 카테고리의 다른 글
VB.NET에서 함수를 사용되지 않음으로 표시 할 수 있습니까? (0) | 2020.11.20 |
---|---|
장고. (0) | 2020.11.20 |
AssertNull을 사용하거나 AssertNotNull을 사용해야합니다. (0) | 2020.11.20 |
UILabel 글꼴 크기 변경 애니메이션 (0) | 2020.11.20 |
wechat, whatsapp 및 기타 메신저 앱의 기술은 무엇입니까? (0) | 2020.11.20 |