Gestione delle eccezioni (RPC)
RPC usa lo stesso approccio alla gestione delle eccezioni dell'API Windows.
La struttura RpcTryFinally / RpcFinally / RpcEndFinally è equivalente all'istruzione try-finally di Windows . Il costrutto di eccezione RPC RpcTryExcept / RpcExcept / 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 corrispondono direttamente alle dichiarazioni try-finally di Windows e try-except . In altri ambienti, queste macro mappano verso 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.
Mentre le macro RpcTry e RpcExcept offrono un modo indipendente dalla piattaforma personalizzabile 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 eccezioni personalizzati richiedono comunque 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. Non vengono propagate eccezioni dal livello di trasporto del server. Il metodo consigliato per una routine del server per restituire errori al tempo di esecuzione RPC consiste nel generare un'eccezione. Una routine del server può utilizzare qualsiasi metodo appropriato per comunicare gli 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 Open Software Foundation-Distributed Computing Environment (OSF-DCE) che gestiscono le eccezioni TRY, FINALLYe CATCH. Diversi fornitori forniscono file di inclusione che eseguono il mapping delle funzioni RPC OSF-DCE alle funzioni RPC Microsoft, tra cui TRY, CATCH, CATCH_ALLe ENDTRY. Questi file di intestazione mappano anche i codici di errore RPC_S_* alle controparti di eccezione OSF-DCE, rpc_s_*, e mappano i codici di errore RPC_X_* a rpc_x_*. Per la portabilità di OSF-DCE, utilizzare questi file di intestazione. Per altre informazioni sui gestori eccezioni RPC, vedere RpcExceptionFilter, RpcExcept, RpcFinally. Per altre informazioni sui gestori eccezioni di Windows, vedere Gestione delle eccezioni strutturate.