configurar - wcf http binding configuration
ConfiguraciĆ³n de WCF readerQuotas-inconvenientes? (2)
Si un servicio WCF devuelve una matriz de bytes en su mensaje de respuesta, existe la posibilidad de que los datos excedan la longitud predeterminada de 16384 bytes. Cuando esto sucede, la excepción será algo así como
La cuota de longitud de matriz máxima (16384) se ha excedido al leer datos XML. Esta cuota se puede aumentar cambiando la propiedad MaxArrayLength en el objeto XmlDictionaryReaderQuotas utilizado al crear el lector XML.
Todos los consejos que he visto en la web son solo para aumentar la configuración en el elemento <readerQuotas>
al máximo, así que algo así como
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
maxArrayLength="2147483647" maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
en el servidor, y similar en el cliente.
Me gustaría saber de cualquier inconveniente con este enfoque, especialmente si el tamaño de la matriz de bytes puede ocasionalmente ser muy grande. ¿La configuración anterior solo hace que WCF declare una gran matriz para cada solicitud? ¿Tiene que limitar el tamaño máximo de los datos devueltos, o puede simplemente especificar un búfer de tamaño razonable y conseguir que WCF continúe hasta que se lean todos los datos?
¡Gracias!
El inconveniente principal es una posible vulnerabilidad a los ataques, por ejemplo, una fuente maliciosa ahora puede inundar su servidor web con mensajes de hasta 2 GB de tamaño y posiblemente bajarlos.
Por supuesto, permitir mensajes de 2 GB también pone un poco de tensión en su servidor en términos de consumo de memoria, ya que esos mensajes deben ser ensamblados en la memoria, en su totalidad (a menos que use protocolos de transmisión en WCF). Si tienes 10 clientes enviándote mensajes de 2 GB, necesitarás mucha RAM en tu servidor. :-)
Aparte de eso, no veo ningún problema real.
Bagazo
Hay un artículo en MSDN que explica las diversas consideraciones de seguridad que debe tener en cuenta al establecer estos valores. Algunos ataques de denegación de servicio son los que devoran su memoria y algunos de ellos (como MaxDepth no se ha configurado correctamente) podrían causar Exceptions fatales que podrían provocar la caída de su servidor en una sola solicitud.