Problemen met 'aanvraagheader te groot' of 'ongeldige aanvraag' vaststellen en oplossen in Azure Cosmos DB SDK voor .NET
VAN TOEPASSING OP: NoSQL
Het bericht 'Aanvraagheader is te groot' wordt gegenereerd met een HTTP-foutcode 400. Deze fout treedt op als de grootte van de aanvraagheader zo groot is geworden dat deze groter is dan de maximaal toegestane grootte. U wordt aangeraden de nieuwste versie van de Azure Cosmos DB SDK voor .NET te gebruiken. U wordt aangeraden versie 3.x te gebruiken omdat deze primaire versie tracering van headergrootte toevoegt aan het uitzonderingsbericht.
Stappen voor probleemoplossing
Het bericht Aanvraagheader is te groot als de sessie of het vervolgtoken te groot is. In de volgende secties worden de oorzaak van het probleem en de bijbehorende oplossing in elke categorie beschreven.
Sessietoken is te groot
In deze sectie worden scenario's besproken waarin het sessietoken te groot is.
Oorzaak
Een 400 ongeldige aanvraag treedt waarschijnlijk op omdat het sessietoken te groot is. Als de volgende instructies waar zijn, is het sessietoken te groot:
- De fout treedt op bij puntbewerkingen zoals maken, lezen en bijwerken, waarbij er geen vervolgtoken is.
- De uitzondering is gestart zonder wijzigingen aan te brengen in de toepassing. Het sessietoken groeit naarmate het aantal partities toeneemt in de container. Het aantal partities neemt toe naarmate de hoeveelheid gegevens toeneemt of als de doorvoer wordt verhoogd.
Tijdelijke beperking
Start de clienttoepassing opnieuw op om alle sessietokens opnieuw in te stellen. Uiteindelijk groeit het sessietoken terug naar de vorige grootte die het probleem heeft veroorzaakt. Gebruik de oplossing in de volgende sectie om dit probleem volledig te voorkomen.
Oplossing
Belangrijk
Voer een upgrade uit naar ten minste .NET v3.20.1 of v2.16.1. Deze secundaire versies bevatten optimalisaties om de grootte van het sessietoken te verminderen om te voorkomen dat de header groeit en de groottelimiet bereikt.
- Volg de richtlijnen in de artikelen met tips voor prestaties van .NET v3 of .NET v2 . Converteer de toepassing om de modus Directe verbinding met het TCP-protocol (Transmission Control Protocol) te gebruiken. In de modus Directe verbinding met het TCP-protocol is de headergroottebeperking van het HTTP-protocol niet van toepassing, waardoor dit probleem wordt omzeild. Zorg ervoor dat u de nieuwste versie van de SDK gebruikt. Deze bevat een oplossing voor querybewerkingen voor het geval de service-interop niet beschikbaar is.
- Als de directe verbindingsmodus met het TCP-protocol geen optie is voor uw workload, kunt u dit beperken door het consistentieniveau van de client te wijzigen. Het sessietoken wordt alleen gebruikt voor sessieconsistentie. Dit is het standaardconsistentieniveau voor Azure Cosmos DB. Andere consistentieniveaus maken geen gebruik van het sessietoken.
Vervolgtoken is te groot
In deze sectie worden scenario's besproken waarin het vervolgtoken te groot is.
Oorzaak
De 400 ongeldige aanvraag treedt op bij querybewerkingen waarbij het vervolgtoken wordt gebruikt als het token te groot is geworden. Deze fout kan ook optreden als verschillende query's verschillende vervolgtokengrootten hebben.
Oplossing
- Volg de richtlijnen in de artikelen met tips voor prestaties van .NET v3 of .NET v2 . Converteer de toepassing om de modus Directe verbinding met het TCP-protocol te gebruiken. In de modus Directe verbinding met het TCP-protocol is de headergroottebeperking van het HTTP-protocol niet van toepassing, waardoor dit probleem wordt omzeild.
- Als de directe verbindingsmodus met het TCP-protocol geen optie is voor uw workload, stelt u de
ResponseContinuationTokenLimitInKb
optie in. U vindt deze optie inFeedOptions
v2 ofQueryRequestOptions
in v3.
Volgende stappen
- Problemen vaststellen en oplossen wanneer u de Azure Cosmos DB .NET SDK gebruikt.
- Meer informatie over prestatierichtlijnen voor .NET v3 en .NET v2.