Maximum request length exceeded in WCF

I am currently using a Wcf application and am getting the above error in the trace log.

The following is Web.Config for the Wcf service.

<bindings> <wsHttpBinding> <binding name="NewBinding0" closeTimeout="00:50:00" openTimeout="00:50:00" sendTimeout="00:50:00" receiveTimeout="00:50:00" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647"> <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> <reliableSession enabled="true" /> <security mode="None"> <transport clientCredentialType="None" /> <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="false" /> </security> </binding> </wsHttpBinding> </bindings> <diagnostics wmiProviderEnabled="true"> <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" /> </diagnostics> <services> <service behaviorConfiguration="DBSyncWcfService.Service1Behavior" name="DBSyncWcfService.DBSyncService"> <endpoint binding="wsHttpBinding" bindingConfiguration="NewBinding0" name="ABC" contract="DBSyncWcfService.IDBSyncContract" address="http://192.168.5.170:9999/" /> <host> <baseAddresses> 

The following is the configuration of the client side.

  WSHttpBinding binding = new WSHttpBinding(); //binding.ReaderQuotas.MaxArrayLength = 10485760; //binding.MaxReceivedMessageSize = 10485760; binding.Security.Mode = SecurityMode.None; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows; binding.Security.Message.EstablishSecurityContext = false; //binding.Security.Message.NegotiateServiceCredential = true; binding.ReliableSession.Enabled = true; binding.ReaderQuotas.MaxArrayLength = 2147483647; binding.ReaderQuotas.MaxDepth = 2147483647; binding.ReaderQuotas.MaxNameTableCharCount = 2147483647; binding.ReaderQuotas.MaxBytesPerRead = 2147483647; //binding.MaxReceivedMessageSize = 20000000;2147483647 binding.MaxReceivedMessageSize = 2147483647; //binding.MaxReceivedMessageSize = Int32.MaxValue; binding.ReaderQuotas.MaxStringContentLength = 2147483647; //binding.MaxBufferPoolSize = 20000000; binding.MaxBufferPoolSize = 2147483647; //binding.MaxBufferPoolSize = Int32.MaxValue; binding.ReaderQuotas.MaxArrayLength = 2147483647; binding.ReaderQuotas.MaxDepth = 2147483647; binding.SendTimeout = TimeSpan.FromMinutes(50); binding.CloseTimeout = TimeSpan.FromMinutes(50); binding.OpenTimeout = TimeSpan.FromMinutes(50); binding.ReceiveTimeout = TimeSpan.FromMinutes(50); 
+3
source share
2 answers

You may need to install readerQuotas for binding, as shown below:

  WSHttpBinding binding1 = new WSHttpBinding(); binding1.MaxBufferPoolSize = 2147483647; binding1.MaxReceivedMessageSize = 2147483647; var myReaderQuotas1 = new XmlDictionaryReaderQuotas(); myReaderQuotas1.MaxStringContentLength = 2147483647; myReaderQuotas1.MaxDepth = 2147483647; myReaderQuotas1.MaxArrayLength = 2147483647; myReaderQuotas1.MaxBytesPerRead = 2147483647; myReaderQuotas1.MaxNameTableCharCount = 2147483647; binding1.GetType().GetProperty("ReaderQuotas").SetValue(binding1, myReaderQuotas1, null); 

The reason is that setting quotas does not affect an already created binding.

You will also need to increase the "MaxItemsInObjectGraph" value for the DataContractSerializer on both the client and server to a large value.

+3
source

Change the following parameter in web.config

  <configuration> <system.web> <httpRuntime maxRequestLength="xxxx" /> </system.web> </configuration> 

xxxx is the value in KB that you want to set.

+6
source

Source: https://habr.com/ru/post/1206129/


All Articles