Hibakezelés (RPC)
A szinkron RPC-ben az ügyfél egy távoli hívást kezdeményez, amely sikeres vagy sikertelen kóddal tér vissza. Az aszinkron RPC több lehetőséget biztosít a sikertelen hívásra, és ezeket a hibákat a rendszer eltérően kezeli attól függően, hogy hol és mikor fordulnak elő. Az alábbi táblázat a hívások sikertelenségének módjait és kezelésének módját ismerteti.
Ügyféloldali törlés
Hibajelenség | Razzia |
---|---|
Az ügyfél kivételt kap, amikor meghívja a távoli eljárást. | Nincs szükség RPC API-hívásokra. Az összes RPC-állapotot megtisztítottuk. |
Az ügyfél teljes körű hívást kap, de amikor meghívja RpcAsyncCompleteCall, hibaüzenetet kap. | Nincs szükség RPC API-hívásokra. Az összes RPC-állapotot megtisztítottuk. |
Az ügyfél nem megszakított vagy megszakított lemondással kapcsolatos problémái. | Az ügyfélnek várnia kell az értesítésre, és meg kell hívnia RpcAsyncCompleteCall, amikor az értesítés megérkezik. |
A kiszolgálóoldali törlésnél a kulcsfogalom az átadási pont. Az aszinkron hívás kiszolgálóoldali feldolgozása során általában a hívást fogadó szálon (más néven a kézbesítőszálon) végeznek feldolgozást, majd szükség esetén a diszpécserszál elegendő állapotot helyez egy memóriablokkba, és egy másik szálat (más néven feldolgozó szálat) jelez a hívás feldolgozásának folytatásához. Az a pillanat, amikor a diszpécserszál sikeresen jelzi, hogy a feldolgozó szálat kézhezadási pontnak nevezik.
Kiszolgálóoldali karbantartás
Hiba történt | Razzia |
---|---|
Az átadási pont előtt. | Kivételt dobjon ki. Nincs szükség az RpcAsyncCompleteCallhívására. |
Az átadási pont után. | Hívja meg RpcAsyncAbortCall, vagy ha a hiba nem végzetes, és az eredmények továbbra is visszaadhatók az ügyfélnek, RpcAsyncCompleteCall. Ha a RpcAsyncCompleteCall függvényhívás meghiúsul, az RPC-futtatókörnyezet felszabadítja a paramétereket. A felhasználó nem férhet hozzá ezekhez a paraméterekhez. A diszpécserszál nem végezhet olyan jelentős feldolgozást, amely a leosztási pont után meghiúsulhat, mert már nem tudja biztonságosan megszakítania a hívást. Pontosabban, nem szabad kivételt kivenni a leosztási pont után, vagy a kiszolgáló összeomlhat. |
Speciális hibakezelési esetek csövekhez
A csövek használatakor speciális esetek vannak a hibák kezelésére. Az alábbi lista ismerteti a hiba forrását és a hiba kezelését.
A hiba forrása | A kezelés menete |
---|---|
Ügyfélhívások leküldése és a hívás meghiúsul. | Nincs szükség RPC API-hívásokra. Az összes RPC-állapotot megtisztítottuk. |
Ügyfélhívások RpcAsyncCompleteCall, mielőtt acsövekben lévőkiürítené. | A hívás a megfelelő csőkitöltési hibakóddal meghiúsul. |
Az ügyfélhívások lekérése és a hívás meghiúsul. | Nincs szükség RPC API-hívásokra. Az összes RPC-állapotot megtisztítottuk. |
Az ügyfél vagy a kiszolgáló nem megfelelő sorrendben hívja meg a leküldést vagy a lekérést. | A futási idő a csőkitöltési hiba állapotát adja vissza. |
A kiszolgáló leküldéses vagy lekéréses hívásokat indít, és a hívás meghiúsul. | A leküldés egy hibakódot ad vissza. Nincs szükség az RpcAsyncCompleteCallhívására. |
A kiszolgáló meghívja RpcAsyncCompleteCall a csövek ürítése előtt. | A csőhívás egy csőkitöltési hibaállapotot ad vissza. |
A küldés után a fogadási művelet meghiúsul. | Amikor a kiszolgáló legközelebb meghívja a lekérést a csőadatok fogadásához, a rendszer hibát ad vissza. |