Control de excepciones (RPC)
RPC usa el mismo enfoque para el control de excepciones que la API de Windows.
La estructura RpcTryFinallyRpcFinally / RpcEndFinally / equivale a la instrucción try-finally de Windows. La construcción de excepción RPC RpcTryExceptRpcExcept RpcExcept / rpcEndExcept / es equivalente a la instrucción try-except de Windows.
Cuando se usan los controladores de excepciones RPC, el código fuente del lado cliente es portátil. Los diferentes archivos de encabezado RPC proporcionados para cada plataforma resuelven las macros RpcTry y RpcExcept para cada plataforma. En el entorno de Windows, estas macros se asignan directamente a las instrucciones try-finally y try-except de Windows. En otros entornos, estas macros se asignan a otras implementaciones específicas de la plataforma de controladores de excepciones.
Las posibles excepciones generadas por estas estructuras incluyen el conjunto de códigos de error devueltos por las funciones RPC con los prefijos RPC_S_ y RPC_X y el conjunto de excepciones devueltas por Windows. Para más información, consulte Valores devueltos de RPC.
Aunque las macros RpcTry y RpcExcept proporcionan una manera personalizable independiente de la plataforma para controlar excepciones, en Windows Vista y versiones posteriores de Windows, RpcExceptionFilter es la forma recomendada de controlar excepciones. No requiere que se escriban filtros personalizados para capturar muchas de las excepciones estructuradas más comunes; sin embargo, los filtros de excepción personalizados siguen necesitando RpcExcept.
Las excepciones que se producen en la aplicación de servidor, el código auxiliar del servidor y la biblioteca en tiempo de ejecución del servidor (por encima de la capa de transporte) se propagan al cliente. No se propaga ninguna excepción desde el nivel de transporte del servidor. El método recomendado para una rutina de servidor para devolver errores al tiempo de ejecución rpc es producir una excepción. Una rutina de servidor puede usar cualquier método adecuado para comunicar errores entre rutinas de servidor, pero si encuentra un error que impide que ejecute el procedimiento remoto, debe generar una excepción después de limpiar y antes de volver al tiempo de ejecución de RPC, en lugar de devolver un valor a RPC que solo la rutina del servidor reconoce como un error.
En la ilustración siguiente se muestra cómo se devuelven las excepciones del servidor al cliente.
Los controladores de excepciones RPC difieren ligeramente de las macros de control de excepciones try, FINALLY y CATCH del entorno de informática open Foundation-Distributed software (OSF-DCE). Varios proveedores proporcionan archivos de inclusión que asignan las funciones RPC de OSF-DCE a las funciones RPC de Microsoft, como TRY, CATCH, CATCH_ALL y ENDTRY. Estos archivos de encabezado también asignan los códigos de error RPC_S_* a los homólogos de excepción OSF-DCE, rpc_s_*, y asignan códigos de error RPC_X_* a rpc_x_*. Para la portabilidad de OSF-DCE, use estos archivos de inclusión. Para obtener más información sobre los controladores de excepciones RPC, vea RpcExceptionFilter, RpcExcept, RpcFinally. Para obtener más información sobre los controladores de excepciones de Windows, vea Control de excepciones estructurado.