Barvna shema: Svetla
Trenutno dejavna stran: start » sl » Dokumentacija » Integracija podatkov in dostop do podatkov » WKL Database Gateway » Odjemalec .NET Wkl.Data.Gateway.Client – pregled » Odpravljanje težav » Zahteva ne uspe z GatewayRequestException

Zahteva ne uspe z GatewayRequestException

Okolje

Vsaka različica odjemalca s podatkovnim prehodom Wkl.Data.Gateway.

Vzrok

Vsak vir napake – odgovor prehoda, prekoračitev časovne omejitve, prekinjena povezava, neberljiv odgovor – prispe kot GatewayRequestException z GatewayProblem: Kind (vrsta), Message (besedilo prehoda ali odjemalca), CorrelationId (identifikator, pod katerim prehod zapiše podrobnosti v dnevnik) in IsTransient (true samo pri Unavailable in TimedOut).

Prehod v odgovoru navede kodo, odjemalec pa iz nje prevzame vrsto. Če kode ni – na primer ker je namesto prehoda odgovoril posredniški strežnik ali izenačevalnik obremenitve –, odjemalec napako razvrsti po statusu HTTP: 400 → MalformedRequest, 401 → Unauthenticated, 403 → Forbidden, 404 → UnknownResource, 409 → Conflict, 412 → PreconditionFailed, 413, 414 in 429 → LimitExceeded, 422 → DatabaseRejected, 504 → TimedOut, vsak drug status → Unavailable. Svoje napake prehod javlja s temi kodami; 500 izvira iz člena med odjemalcem in prehodom ali iz nepričakovane napake, ki je prehod ni mogel prestreči.

Dve napaki ne prispeta kot GatewayRequestException:

  • ArgumentException pri ustvarjanju GatewayResource, GatewayQuery, GatewayFilter ali GatewayRoutineRequest ter pri ReadAsync za ime argumenta: ime ni veljaven identifikator ali vrednost je zunaj dovoljenega obsega (glejte Programski vmesnik). Zahteva ni bila poslana.
  • JsonException pri branju vrstic: odgovor se ne ujema s TRow, na primer ker stolpec vrne besedilo, lastnost pa pričakuje število. Zahteva se je izvedla; popravite tip vrstice ali berite v JsonElement.

Rešitev

KindPomenKaj storiti
Unauthenticatedključ ni nastavljen; ključ je neveljaven, preklican ali potekel; ali pravilo prijave zahteva 2FAPreverite spremenljivko okolja iz ApiKeyEnvironmentVariable (prebere se ob vsaki zahtevi; če manjka, se zahteva ne pošlje). Če pravilo zahteva 2FA, odjemalec ključa ne more uporabiti; skrbnika prosite za ključ brez te zahteve
Forbiddenpravilo ključa dostopa ne dovoliNaj skrbnik prehoda preveri pravilo; navedite CorrelationId
UnknownResourcealias ali objekt ne obstaja ali ni odobren – namerno nerazločljivo. Neznano polje pa prispe kot MalformedRequestPreverite zapis; nato ravnajte kot pri Forbidden
UnknownResource samo pri dolgih bralnih zahtevahstarejši prehod ne sprejema bralnih zahtev v telesu (POST …/$query)Povečajte MaxUrlLength ali posodobite prehod
MalformedRequestzahteva je neveljavna, na primer neznano polje, vrednost tipa, ki je ni mogoče prenesti, ali argumenti za objekt, ki jih ne sprejemaPreverite imena polj, filtre in vrednosti
LimitExceededpreveč zahtev (429), prevelika zahteva (413, 414) ali odgovor, večji od MaxResponseBytes, katerega dolžino je prehod navedel vnaprejPri 429 poskusite pozneje; sicer zmanjšajte okno ali izbiro polj ali povečajte MaxResponseBytes
DatabaseRejectedpodatkovna zbirka ali procedura je zahtevo zavrnilaČe je procedura sprožila sporočilo (THROW ali RAISERROR s številko od 50000 naprej in resnostjo od 11 do 16), je njegovo besedilo v Message; sicer je tam nespremenljivo besedilo, razlog pa navaja EngineMessages (glejte spodaj)
Conflictstavek krši ključ ali enolični indeks, tudi v proceduri (od odjemalca 0.2.1)Ne ponavljajte: ista zahteva spet ne uspe. Preverite vrednosti; EngineMessages navede sporočilo
PreconditionFailedvrstica je bila po branju spremenjena (od odjemalca 0.2.1)Vrstico znova preberite in spremembo ponovite na novem stanju
TimedOutprehod je stavek prekinil po svoji časovni omejitviBranje: zožite zahtevo ali poskusite pozneje. Klicanje: ne ponavljajte na slepo – najprej preverite, ali je procedura učinkovala
Unavailableprehod ali podatkovna zbirka ni dosegljiva, povezava se je prekinila, odgovor ni berljiv ali je odjemalec obupal po svoji časovni omejitviBranje: poskusite pozneje; če stanje ostane, obvestite skrbnika. Klicanje: ne ponavljajte na slepo – če je bila zahteva poslana, je procedura morda učinkovala
DatabaseUnreadableSQL Server odgovarja, vendar podatkovne zbirke aliasa ne more prebrati (od odjemalca 0.2.0)Ne ponavljajte (IsTransient je false): stanje ostane, dokler skrbnik ne odpravi vzroka, navadno s ponovnim zagonom SQL Serverja; obvestite skrbnika s CorrelationId

IsTransient pove samo, ali bi ista zahteva pozneje lahko uspela. Ne pove pa, ali je ponovitev neškodljiva: pri klicu procedure o tem odloči aplikacija.

Ob vsakem vprašanju skrbniku navedite CorrelationId, čas, alias in objekt.

DatabaseUnreadable ne zajema vsake neberljive podatkovne zbirke. Prehod javi DatabaseUnreadable samo za določen seznam številk napak SQL Serverja; napaka pri branju iz drugega razloga še vedno prispe kot Unavailable. Odsotnost te vrste torej ne dokazuje, da je podatkovna zbirka berljiva. Seznam je v „HTTP: specifikacija vmesnika“ (dokumentacija podatkovnega prehoda), razdelek „Oblika napak“.

Sporočila SQL Serverja (od odjemalca 0.2.0). Problem.EngineMessages za vsako sporočilo vsebuje Number, SqlState, Severity, Message in Released. Če je Released false, je v Message besedilo prehoda namesto besedila SQL Serverja, ker bi to navajalo imena objektov, ki jih klicatelj ne sme videti, ali – pri prijavi aliasa – lahko navedlo vrednost podatka; številka in SQLSTATE prispeta vedno. Prehod pred specifikacijo vmesnika 0.5.0 sporočil ne pošilja; seznam je tedaj prazen. Pri prekinjeni povezavi in prekoračitvi časovne omejitve je vedno prazen.

Sorodne teme

sl/wiki/data-conectivity/database-gateway/client/troubleshooting/handle-service-errors.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille