Compartilhar via


Tratamento de exceções (RPC)

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

A estrutura RpcTryFinally / RpcFinally / RpcEndFinally é equivalente à instrução try-finally do Windows. O constructo de exceção 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 resolve as macros RpcTry e RpcExcept para cada plataforma. No ambiente do Windows, essas macros são mapeadas diretamente para as instruções try-finally e try-except do Windows. Em outros ambientes, essas macros são mapeadas para outras implementações específicas da plataforma de manipuladores de exceção.

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 retornado pelo Windows. Para obter detalhes, confira Valores retornados de RPC.

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

Exceções que ocorrem no aplicativo de 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 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 é gerar uma exceção. Uma rotina de servidor pode usar os métodos apropriados para comunicar erros entre rotinas de servidor, mas se encontrar um erro que o impeça de executar o procedimento remoto, ele deve gerar uma exceção após a limpeza e antes de retornar ao tempo de execução do RPC, em vez de retornar um valor ao RPC que somente 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 por meio do respectivo runtime rpc de cada componente

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