Compartir a través de


Diagnóstico y solución de problemas de mensajes de "encabezado de solicitud demasiado grande" o "solicitud incorrecta" en el SDK de Azure Cosmos DB para .NET

SE APLICA A: NoSQL

El mensaje "Encabezado de solicitud demasiado grande" se muestra con un código de error HTTP 400. Este error se produce cuando el tamaño del encabezado de solicitud ha crecido tanto que supera el tamaño máximo permitido. Se recomienda usar la versión más reciente del SDK de Azure Cosmos DB para .NET. Se recomienda usar la versión 3.x porque esta versión principal agrega el seguimiento del tamaño del encabezado al mensaje de excepción.

Pasos para solucionar problemas

El mensaje "Encabezado de solicitud demasiado grande" aparece si el token de sesión o de continuación es demasiado grande. En las secciones siguientes se describe la causa del problema y su solución en cada categoría.

El token de sesión es demasiado grande

En esta sección se revisan los escenarios en los que el token de sesión es demasiado grande.

Causa

Es más probable que se produzca una solicitud incorrecta 400 porque el token de sesión es demasiado grande. Si se cumplen las siguientes condiciones, el token de sesión es demasiado grande:

  • El error se produce en operaciones puntuales como crear, leer y actualizar, en las que no hay un token de continuación.
  • La excepción se inició sin realizar cambios en la aplicación. El token de sesión crece a medida que aumenta el número de particiones en el contenedor. El número de particiones crece a medida que también lo hace la cantidad de datos o si se aumenta el rendimiento.

Mitigación temporal

Reinicie la aplicación cliente para restablecer todos los tokens de sesión. Es posible que el token de sesión vuelva a crecer hasta el tamaño anterior que causó el problema. Para evitar este problema por completo, use la solución de la sección siguiente.

Solución

Importante

Actualice al menos a .NET v3.20.1 o v2.16.1. Estas versiones secundarias contienen optimizaciones para reducir el tamaño del token de sesión, con el fin de evitar que el encabezado crezca y alcance el límite de tamaño.

  1. Siga las instrucciones de los artículos sobre las sugerencias de rendimiento para .NET v3 o .NET v2. Convierta la aplicación para que use el modo de conexión directa con el Protocolo de control de transmisión (TCP). El modo de conexión directa con el protocolo TCP no tiene la restricción de tamaño de encabezado como el protocolo HTTP, por lo que se evita este problema. Asegúrese de usar la versión más reciente del SDK, que tiene una corrección para las operaciones de consulta cuando la interoperabilidad del servicio no está disponible.
  2. Si el modo de conexión directa con el protocolo TCP no es una opción para su carga de trabajo, mitigue el problema cambiando el nivel de coherencia del cliente. El token de sesión solo se usa para la coherencia de la sesión, que es el nivel de coherencia predeterminado para Azure Cosmos DB. Los otros niveles de coherencia no usan el token de sesión.

El token de continuación es demasiado grande

En esta sección se revisan los escenarios en los que el token de continuación es demasiado grande.

Causa

La solicitud incorrecta con código de error 400 se produce en operaciones de consulta en las que se usa el token de continuación si el token ha crecido demasiado. Este error también puede producirse si diferentes consultas tienen diferentes tamaños de token de continuación.

Solución

  1. Siga las instrucciones de los artículos sobre las sugerencias de rendimiento para .NET v3 o .NET v2. Convierta la aplicación para que use el modo de conexión directa con el protocolo TCP. El modo de conexión directa con el protocolo TCP no tiene la restricción de tamaño de encabezado como el protocolo HTTP, por lo que se evita este problema.
  2. Si el modo de conexión directa con el protocolo TCP no es una opción para su carga de trabajo, establezca la opción ResponseContinuationTokenLimitInKb. Puede encontrar esta opción en FeedOptions en v2 o en QueryRequestOptions en v3.

Pasos siguientes