Dela via


Diagnostisera och felsöka meddelanden om "begärandehuvudet är för stort" eller "felaktig begäran" i Azure Cosmos DB SDK för .NET

GÄLLER FÖR: NoSQL

Meddelandet "Begärandehuvudet är för stort" genereras med HTTP-felkoden 400. Det här felet uppstår om storleken på begärandehuvudet har blivit så stor att den överskrider den maximala tillåtna storleken. Vi rekommenderar att du använder den senaste versionen av Azure Cosmos DB SDK för .NET. Vi rekommenderar att du använder version 3.x eftersom den här huvudversionen lägger till spårning av rubrikstorlek i undantagsmeddelandet.

Felsökningsanvisningar

Meddelandet "Begärandehuvudet är för stort" inträffar om sessionen eller fortsättningstoken är för stor. I följande avsnitt beskrivs orsaken till problemet och dess lösning i varje kategori.

Sessionstoken är för stor

Det här avsnittet behandlar scenarier där sessionstoken är för stor.

Orsak

En 400 felaktig begäran inträffar troligen eftersom sessionstoken är för stor. Om följande påståenden är sanna är sessionstoken för stor:

  • Felet uppstår vid punktåtgärder som att skapa, läsa och uppdatera där det inte finns någon fortsättningstoken.
  • Undantaget startade utan att göra några ändringar i programmet. Sessionstoken växer när antalet partitioner ökar i containern. Antalet partitioner ökar när mängden data ökar eller om dataflödet ökar.

Tillfällig åtgärd

Starta om klientprogrammet för att återställa alla sessionstoken. Slutligen växer sessionstoken tillbaka till den tidigare storlek som orsakade problemet. Undvik det här problemet helt genom att använda lösningen i nästa avsnitt.

Lösning

Viktigt!

Uppgradera till minst .NET v3.20.1 eller v2.16.1. Dessa mindre versioner innehåller optimeringar för att minska storleken på sessionstoken för att förhindra att huvudfältet växer och överstiger storleksgränsen.

  1. Följ riktlinjerna i artiklarna prestandatips för .NET v3 eller .NET v2 . Konvertera programmet så att det använder direktanslutningsläge med TCP (Transmission Control Protocol). I direktanslutningsläge med TCP-protokollet förekommer inte samma begränsning gällande rubriklängd som med HTTP-protokollet, så det här problemet uppstår inte. Se till att du använder den senaste versionen av SDK:t, som har en korrigering för frågeåtgärder när tjänstsamverkan inte är tillgänglig.
  2. Om direktanslutningsläget med TCP-protokollet inte är ett alternativ för din arbetsbelastning kan du minimera det genom att ändra klientkonsekvensnivån. Sessionstoken används bara för sessionskonsekvens, som är standardkonsekvensnivån för Azure Cosmos DB. Andra konsekvensnivåer använder inte sessionsnyckeln.

Fortsättningstoken är för stor

Det här avsnittet granskar scenarier där fortsättningsmarkören är för stor.

Orsak

Den felaktiga 400-begäran inträffar vid frågeåtgärder där fortsättningstoken används om token har blivit för stor. Det här felet kan också inträffa om olika frågor har olika fortsättningstokenstorlekar.

Lösning

  1. Följ riktlinjerna i artiklarna prestandatips för .NET v3 eller .NET v2 . Konvertera programmet så att det använder direktanslutningsläge med TCP-protokollet. I direktanslutningsläge med TCP-protokollet förekommer inte samma begränsning gällande rubriklängd som med HTTP-protokollet, så det här problemet uppstår inte.
  2. Om direktanslutningsläget med TCP-protokollet inte är ett alternativ för din arbetsbelastning anger du alternativet ResponseContinuationTokenLimitInKb . Du hittar det här alternativet i FeedOptions v2 eller QueryRequestOptions i v3.

Nästa steg