Tengo este problema loco que estoy tratando de resolver. Sé que cuando estamos obteniendo una gran cantidad de datos debemos aumentar la cuota en el archivo .config del cliente, pero ¿qué se supone que debo hacer si mi cliente está enviando datos enormes "al" servidor WCF?La cuota máxima de tamaño de mensaje para los mensajes entrantes (65536) ... Para aumentar la cuota, use la propiedad MaxReceivedMessageSize
Funciona perfectamente normal cuando envío parámetros de entrada de tamaño pequeño. Desafortunadamente, se descompone cuando la información crece.
depurador que dice:
Solicitud incorrecta, 400;
el archivo de seguimiento es: se ha excedido
La cuota máxima de tamaño de mensaje para los mensajes entrantes (65536) . Para aumentar la cuota, use la propiedad MaxReceivedMessageSize en el elemento de enlace apropiado.
¿Hay alguna manera de aumentar esta cuota de datos entrantes en el servidor? ¿si es así, cómo?
partes Aquí está relacionada Las muestras de configuración:
<bindings>
<basicHttpBinding>
<binding name="MyBasicHttpBinding"
closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00"
sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="MyWcfService">
<endpoint address="http://myservice..."
binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding"
name="MyBasicHttpBinding" contract="IMyContract" />
</service>
</services>
y aquí está mi código de cliente (creo que de forma dinámica):
var binding = new BasicHttpBinding();
binding.MaxBufferPoolSize = 2147483647;
binding.MaxBufferSize = 2147483647;
binding.MaxReceivedMessageSize = 2147483647;
binding.ReaderQuotas.MaxStringContentLength = 2147483647;
binding.ReaderQuotas.MaxArrayLength = 2147483647;
binding.ReaderQuotas.MaxDepth = 2147483647;
binding.ReaderQuotas.MaxBytesPerRead = 2147483647;
var address = new EndpointAddress("http://mylocalservice..");
ChannelFactory<IMyContract> factory = new ChannelFactory<IMyContract>(binding, address);
foreach (OperationDescription op in factory.Endpoint.Contract.Operations)
{
DataContractSerializerOperationBehavior dataContractBehavior =
op.Behaviors.Find<DataContractSerializerOperationBehavior>()
as DataContractSerializerOperationBehavior;
if (dataContractBehavior != null)
{
dataContractBehavior.MaxItemsInObjectGraph = 2147483646;
}
}
public IMyContract MyClientObject = factory.CreateChannel();
He resuelto el problema por el paso mencionado [aquí] [1] [1]: http: // stackoverflow.com/questions/7476853/wcf-error-maximum-number-of-items-that-can-be-serialized-or-deserialized-in-an/8656402 # 8656402 – Ram
En el código del lado del cliente está configurando las cuotas de lector mediante código entonces el siguiente es el enfoque para configurarlos: XmlDictionaryReaderQuotas myReaderQuotas = new XmlDictionaryReaderQuotas(); myReaderQuotas.MaxStringContentLength = 2147483647; myReaderQuotas.MaxArrayLength = 2147483647; myReaderQuotas.MaxBytesPerRead = 2147483647; myReaderQuotas.MaxDepth = 64; myReaderQuotas.MaxNameTableCharCount = 2147483647; binding.GetType(). GetProperty ("ReaderQuotas"). SetValue (binding, myReaderQuotas, null); – Rajesh