WCF – Cómo boost la cuota de tamaño del mensaje

Tengo un Servicio WCF que devuelve 1000 registros de la base de datos al cliente. Tengo un cliente ASP.NET WCF (he agregado una referencia de servicio en el proyecto de aplicación web asp.net para consumir WCF).

Recibo el siguiente mensaje cuando ejecuto la aplicación cliente:

Se ha excedido la cuota máxima de tamaño de mensaje para los mensajes entrantes (65536). Para boost la cuota, use la propiedad MaxReceivedMessageSize en el elemento de enlace apropiado.

¿Alguna ayuda? ¿Cómo boost la cuota de tamaño del mensaje?

Querrá algo como esto para boost las cuotas de tamaño del mensaje, en el archivo App.config o Web.config :

       

Y use el nombre de enlace en su configuración de punto final, por ejemplo

 ... bindingConfiguration="basicHttp" ... 

La justificación de los valores es simple, son lo suficientemente grandes para acomodar la mayoría de los mensajes. Puede sintonizar ese número para satisfacer sus necesidades. El bajo valor predeterminado está básicamente allí para evitar ataques de tipo DOS. Hacerlo 20000000 permitiría que un ataque DOS distribuido sea efectivo, el tamaño predeterminado de 64k requeriría una gran cantidad de clientes para dominar la mayoría de los servidores en estos días.

Si todavía recibe este mensaje de error mientras utiliza WCF Test Client, es porque el cliente tiene una configuración de MaxBufferSize por separado.

Para corregir el problema:

  1. Haga clic con el botón derecho en el nodo Config File en la parte inferior del árbol
  2. Seleccione Editar con SvcConfigEditor

Aparecerá una lista de configuraciones editables, incluido MaxBufferSize.

Nota: Los clientes proxy generados automáticamente también configuran MaxBufferSize en 65536 de forma predeterminada.

Si está creando sus enlaces WCF dinámicamente aquí está el código para usar:

 BasicHttpBinding httpBinding = new BasicHttpBinding(); httpBinding.MaxReceivedMessageSize = Int32.MaxValue; httpBinding.MaxBufferSize = Int32.MaxValue; // Commented next statement since it is not required // httpBinding.MaxBufferPoolSize = Int32.MaxValue; 

WCF Test Client tiene su propia configuración de cliente.

Ejecute el cliente de prueba y desplácese hasta la parte inferior. Si hace doble clic en el nodo Config File, verá la representación XML. Como puede ver, maxReceivedMessageSize es 65536 .

Para editar esto, haga clic con el SvcConfigEditor derecho en el nodo del árbol Config File y seleccione Edit With SvcConfigEditor . Cuando el editor abra, expanda Vinculaciones y haga doble clic en el enlace que se generó automáticamente.

Puede editar todas las propiedades aquí, incluido maxReceivedMessageSize . Cuando haya terminado, haga clic en Archivo – Guardar .

Por último, cuando haya vuelto a la ventana de WCF Test Client, haga clic en Herramientas – Opciones .

NOTA : desmarque la configuración Siempre regenerar al iniciar servicios .

Encontré la manera fácil

— Haga clic derecho en el archivo de configuración webconfig o de la aplicación y haga clic en EDITAR CONFIGURACIÓN WCF y llegue a bingdigs y seleccione el servicio anterior y el lado derecho mostrar maxReciveMessageSize dar un gran número —

Resuelvo el problema … de la siguiente manera

                    

             

Resolví mi problema en Bing Maps WPF en mi proyecto Using CalculateRoute (). La solución en mi caso fue establecer maxReceivedMessageSize y maxReceivedMessageSize en el atributo “httpTransport” para la sección “customBinding”.

Configuré en el archivo applications.config (es.myApp.config) esta configuración:

                         

Otra cosa importante a considerar desde mi experiencia …

Recomiendo encarecidamente NO maximizar maxBufferPoolSize, ya que los almacenamientos intermedios del conjunto nunca se liberan hasta que se recicla el dominio de la aplicación (es decir, el grupo de aplicaciones).

Un período de alto tráfico podría causar que se use mucha memoria y nunca se lance.

Más detalles aquí:

No olvide que se considerará el app.config del punto de entrada de la ejecución, no el proyecto de la biblioteca en clase que administra las llamadas del servicio web, si es que hay una.

Por ejemplo, si obtiene el error al ejecutar la prueba unitaria, debe configurar la configuración adecuada en el proyecto de prueba.

Obtuve este error al usar esta configuración en web.config

 System.ServiceModel.ServiceActivationException 

Configuro configuraciones como esta:

               

Para HTTP:

        

Para TCP:

        

IMPORTANTE:

Si intentas pasar objetos complejos que tienen muchos objetos conectados (por ejemplo: una estructura de datos de árbol, una lista que tiene muchos objetos …), la comunicación fallará sin importar cómo hayas aumentado las Cuotas. En tales casos, debe boost el conteo de objetos que contienen:

    ...     

Para mí, todo lo que tuve que hacer es agregar maxReceivedMessageSize="2147483647" al cliente app.config. El servidor no fue tocado