Gestione delle eccezioni (RPC)
RPC usa lo stesso approccio alla gestione delle eccezioni dell'API Windows.
La struttura RpcTryFinally / RpcFinally / RpcEndFinally equivale all'istruzione try-finally di Windows. Il costrutto di eccezione RPC RpcTryExceptRpcExcept / / RpcEndExcept equivale all'istruzione try-except di Windows.
Quando si usano i gestori di eccezioni RPC, il codice sorgente lato client è portabile. I diversi file di intestazione RPC forniti per ogni piattaforma risolvono le macro RpcTry e RpcExcept per ogni piattaforma. Nell'ambiente Windows, queste macro eseguono il mapping direttamente alle istruzioni try-finally di Windows e try-except . In altri ambienti, queste macro eseguono il mapping ad altre implementazioni specifiche della piattaforma dei gestori di eccezioni.
Le potenziali eccezioni generate da queste strutture includono il set di codici di errore restituiti dalle funzioni RPC con i prefissi RPC_S_ e RPC_X e il set di eccezioni restituite da Windows. Per informazioni dettagliate, vedere Valori restituiti RPC.
Sebbene le macro RpcTry e RpcExcept forniscano un modo personalizzabile indipendente dalla piattaforma per gestire le eccezioni, in Windows Vista e versioni successive di Windows, RpcExceptionFilter è il modo consigliato per gestire le eccezioni. Non richiede la scrittura di filtri personalizzati per acquisire molte delle eccezioni strutturate più comuni; Tuttavia, i filtri di eccezione personalizzati richiedono ancora RpcExcept.
Le eccezioni che si verificano nell'applicazione server, nello stub del server e nella libreria di runtime del server (sopra il livello di trasporto) vengono propagate al client. Nessuna eccezione viene propagata dal livello di trasporto server. Il metodo consigliato per una routine del server per restituire errori al runtime RPC consiste nel generare un'eccezione. Una routine del server può utilizzare qualsiasi metodo appropriato per la comunicazione degli errori tra routine del server, ma se rileva un errore che impedisce l'esecuzione della routine remota, deve generare un'eccezione dopo la pulizia e prima di tornare alla fase di esecuzione RPC, anziché restituire un valore a RPC che solo la routine del server riconosce come errore.
Nella figura seguente viene illustrato come vengono restituite eccezioni dal server al client.
I gestori di eccezioni RPC differiscono leggermente rispetto alle macro TRY, FINALLY e CATCH (Open Software Foundation-Distributed Computing Environment). Vari fornitori forniscono file di inclusione che eseguono il mapping delle funzioni RPC OSF-DCE alle funzioni RPC Microsoft, tra cui TRY, CATCH, CATCH_ALL e ENDTRY. Questi file di intestazione eseguono anche il mapping dei codici di errore RPC_S_* alle controparti delle eccezioni OSF-DCE, rpc_s_*e mappano i codici di errore RPC_X_* a rpc_x_*. Per la portabilità OSF-DCE, usare questi file di inclusione. Per altre informazioni sui gestori di eccezioni RPC, vedere RpcExceptionFilter, RpcExcept, RpcFinally. Per altre informazioni sui gestori di eccezioni di Windows, vedere Structured Exception Handling.For more information about the Windows exception handlers, see Structured Exception Handling.