Gestion des exceptions (RPC)
RPC utilise la même approche pour la gestion des exceptions que l’API Windows.
La structure RpcTryFinally / RpcEndFinally / est équivalente à l’instruction try-finally de Windows. La construction d’exception RPCTryExcept / RpcExcept / RpcEndExcept est équivalente à l’instruction try-except Windows.
Lorsque vous utilisez les gestionnaires d’exceptions RPC, votre code source côté client est portable. Les différents fichiers d’en-tête RPC fournis pour chaque plateforme résolvent les macros RpcTry et RpcExcept pour chaque plateforme. Dans l’environnement Windows, ces macros sont mappées directement aux instructions try-finally et try-except de Windows. Dans d’autres environnements, ces macros sont mappées à d’autres implémentations spécifiques à la plateforme de gestionnaires d’exceptions.
Les exceptions potentielles déclenchées par ces structures incluent l’ensemble de codes d’erreur retourné par les fonctions RPC avec les préfixes RPC_S_ et RPC_X et l’ensemble d’exceptions retourné par Windows. Pour plus d’informations, consultez Valeurs de retour RPC.
Bien que les macros RpcTry et RpcExcept fournissent une méthode indépendante de la plateforme personnalisable pour gérer les exceptions, dans Windows Vista et les versions ultérieures de Windows, RpcExceptionFilter est la méthode recommandée pour gérer les exceptions. Il n’est pas nécessaire d’écrire des filtres personnalisés pour capturer la plupart des exceptions structurées les plus courantes ; Toutefois, les filtres d’exceptions personnalisés nécessitent toujours RpcExcept.
Les exceptions qui se produisent dans l’application serveur, le stub du serveur et la bibliothèque d’exécution du serveur (au-dessus de la couche de transport) sont propagées au client. Aucune exception n’est propagée à partir du niveau de transport du serveur. La méthode recommandée pour qu’une routine de serveur retourne des erreurs au moment de l’exécution rpc consiste à lever une exception. Une routine serveur peut utiliser les méthodes appropriées pour communiquer les erreurs entre les routines de serveur, mais si elle rencontre une erreur qui l’empêche d’exécuter la procédure distante, elle doit déclencher une exception après le nettoyage et avant de revenir au moment de l’exécution rpc, plutôt que de retourner une valeur à RPC que seule la routine serveur reconnaît comme une erreur.
La figure suivante montre comment les exceptions sont retournées du serveur au client.
Les gestionnaires d’exceptions RPC diffèrent légèrement des macros de gestion des exceptions d’Open Software Foundation-Distributed Computing Environment (OSF-DCE) TRY, FINALLY et CATCH. Différents fournisseurs fournissent des fichiers include qui mappent les fonctions RPC OSF-DCE aux fonctions RPC de Microsoft, notamment TRY, CATCH, CATCH_ALL et ENDTRY. Ces fichiers d’en-tête mappent également les codes d’erreur RPC_S_* aux équivalents d’exception OSF-DCE, rpc_s_*, et mappent les codes d’erreur RPC_X_* à rpc_x_*. Pour la portabilité OSF-DCE, utilisez ces fichiers include. Pour plus d’informations sur les gestionnaires d’exceptions RPC, consultez RpcExceptionFilter, RpcExcept, RpcFinally. Pour plus d’informations sur les gestionnaires d’exceptions Windows, consultez Gestion structurée des exceptions.