Поделиться через


Обработка исключений (RPC)

RPC использует тот же подход к обработке исключений, что и API Windows.

Структура RpcTryFinally / RpcFinally / RpcEndFinally эквивалентна инструкции Windows try-finally . Конструкция исключения RPC RpcTryExcept / RpcExcept / RpcEndExcept эквивалентна инструкции Windows try-except .

При использовании обработчиков исключений RPC исходный код на стороне клиента является переносимым. Различные файлы заголовков RPC, предоставляемые для каждой платформы, разрешают макросы RpcTry и RpcExcept для каждой платформы. В среде Windows эти макросы сопоставляются непосредственно с операторами try-finally и try-except Windows. В других средах эти макросы сопоставляют с другими реализациями обработчиков исключений, зависящими от платформы.

Возможные исключения, вызываемые этими структурами, включают набор кодов ошибок, возвращаемых функциями RPC с префиксами RPC_S_ и RPC_X, а также набор исключений, возвращаемых Windows. Дополнительные сведения см. в разделе Возвращаемые значения RPC.

Хотя макросы RpcTry и RpcExcept предоставляют настраиваемый способ обработки исключений, не зависящий от платформы, в Windows Vista и более поздних версиях Windows рекомендуемым способом обработки исключений является RpcExceptionFilter . Он не требует записи пользовательских фильтров для записи многих наиболее распространенных структурированных исключений; Однако настраиваемые фильтры исключений по-прежнему требуют RpcExcept.

Исключения, возникающие в серверном приложении, заглушителе сервера и библиотеке времени выполнения сервера (выше транспортного уровня), распространяются на клиент. Исключения не распространяются на уровне транспорта сервера. Рекомендуемый метод для серверной подпрограммы для возврата ошибок во время выполнения RPC — создать исключение. Серверная подпрограмма может использовать любые методы, подходящие для передачи ошибок между подпрограммами сервера, но если возникает ошибка, препятствующая выполнению удаленной процедуры, она должна вызвать исключение после очистки и перед возвращением во время выполнения RPC, а не возвращать значение RPC, которое только подпрограмма сервера распознает как ошибку.

На следующем рисунке показано, как исключения возвращаются с сервера клиенту.

исключения возвращаются с сервера клиенту через соответствующую среду выполнения rpc каждого компонента.

Обработчики исключений RPC немного отличаются от макросов обработки исключений TRY, FINALLY и CATCH в open Software Foundation-Distributed Computing Environment (OSF-DCE). Различные поставщики предоставляют включаемые файлы, которые сопоставляют функции RPC OSF-DCE с функциями Microsoft RPC, включая TRY, CATCH,CATCH_ALL и ENDTRY. Эти файлы заголовков также сопоставляют коды ошибок RPC_S_* с аналогами исключений OSF-DCE, rpc_s_*, и сопоставляют коды ошибок RPC_X_* с rpc_x_*. Для переносимости OSF-DCE используйте эти файлы. Дополнительные сведения об обработчиках исключений RPC см. в разделе RpcExceptionFilter, RpcExcept, RpcFinally. Дополнительные сведения о обработчиках исключений Windows см. в разделе Структурированная обработка исключений.