Partilhar via


Tratamento de exceções (RPC)

O RPC usa a mesma abordagem para o tratamento de exceções que a API do Windows.

A estrutura RpcTryFinally / RpcFinally / RpcEndFinally é equivalente à instrução try-finally do Windows. A construção de exceção RPC RpcTryExcept / RpcExcept / RpcEndExcept é equivalente à instrução try-except do Windows.

Quando você usa os manipuladores de exceção RPC, o código-fonte do lado do cliente é portátil. Os diferentes arquivos de cabeçalho RPC fornecidos para cada plataforma resolvem as macros RpcTry eRpcExcept para cada plataforma. No ambiente Windows, estas macros são mapeadas diretamente para as instruções try-finally e try-except . Em outros ambientes, essas macros correspondem a outras implementações específicas para a plataforma de manipuladores de exceções.

As exceções potenciais geradas por essas estruturas incluem o conjunto de códigos de erro retornados pelas funções RPC com os prefixos RPC_S_ e RPC_X e o conjunto de exceções retornadas pelo Windows. Para obter detalhes, consulte Valores de retorno RPC.

Enquanto as macros RpcTry e RpcExcept fornecem uma maneira personalizável e independente de plataforma para lidar com exceções, no Windows Vista e versões posteriores do Windows, RpcExceptionFilter é a maneira recomendada de lidar com exceções. Ele não requer que filtros personalizados sejam escritos para capturar muitas das exceções estruturadas mais comuns; no entanto, os filtros de exceção personalizados ainda exigem RpcExcept.

As exceções que ocorrem no aplicativo do servidor, no stub do servidor e na biblioteca de tempo de execução do servidor (acima da camada de transporte) são propagadas para o cliente. Nenhuma exceção é propagada a partir do nível de transporte do servidor. O método recomendado para uma rotina de servidor retornar erros ao tempo de execução do RPC é lançar uma exceção. Uma rotina de servidor pode usar quaisquer métodos apropriados para comunicar erros entre rotinas de servidor, mas se encontrar um erro que a impeça de executar o procedimento remoto, ela deve gerar uma exceção após a limpeza e antes de retornar ao tempo de execução RPC, em vez de retornar um valor para RPC que apenas a rotina do servidor reconhece como um erro.

A figura a seguir mostra como as exceções são retornadas do servidor para o cliente.

exceções são retornadas do servidor para o cliente através do respetivo tempo de execução RPC de cada componente

Os manipuladores de exceção RPC diferem ligeiramente das macros de tratamento de exceções do Open Software Foundation-Distributed Computing Environment (OSF-DCE) TRY, FINALLYe CATCH. Vários fornecedores fornecem arquivos que mapeiam as funções RPC OSF-DCE para as funções RPC da Microsoft, incluindo TRY, CATCH, CATCH_ALLe ENDTRY. Esses ficheiros de cabeçalho também mapeiam os códigos de erro RPC_S_* para as contrapartes de exceção OSF-DCE, rpc_s_*, e mapeiam os códigos de erro RPC_X_* para rpc_x_*. Para a portabilidade OSF-DCE, use estes ficheiros de inclusão. Para obter mais informações sobre os manipuladores de exceção RPC, consulte RpcExceptionFilter, RpcExceptRpcFinally. Para obter mais informações sobre os manipuladores de exceção do Windows, consulte Structured Exception Handling.