RPC는 Windows API와 동일한 예외 처리 방법을 사용합니다.
RpcTryFinally / RpcFinally / RpcEndFinally 구조체는 Windows try-finally 문과 동일합니다. RpcTryExcept / RpcExcept / RpcEndExceptRPC 예외 구문은 windows try-except 문과 동일합니다.
RPC 예외 처리기를 사용하는 경우 클라이언트 쪽 소스 코드는 이식 가능합니다. 각 플랫폼에 대해 제공되는 다양한 RPC 헤더 파일은 각 플랫폼에 대한 RpcTry 및 RpcExcept 매크로를 해결합니다. Windows 환경에서 이러한 매크로는 Windows try-finally문과 try-except문에 직접 매핑됩니다. 다른 환경에서 이러한 매크로는 예외 처리기의 다른 플랫폼별 구현에 매핑됩니다.
이러한 구조에서 발생할 수 있는 예외로는 접두사 RPC_S_ 및 RPC_X RPC 함수에서 반환하는 오류 코드 집합과 Windows에서 반환된 예외 집합이 있습니다. 자세한 내용은 RPC 반환 값참조하세요.
RpcTry 및 RpcExcept 매크로는 Windows Vista 및 이후 버전의 Windows에서 예외를 처리하는 사용자 지정 가능한 플랫폼 중립적인 방법을 제공하지만, RpcExceptionFilter 예외를 처리하는 권장 방법입니다. 가장 일반적인 구조화된 많은 예외를 캡처하기 위해 사용자 지정 필터를 작성할 필요가 없습니다. 그러나 사용자 지정 예외 필터에는 여전히 RpcExcept 필요합니다.
서버 애플리케이션, 서버 스텁 및 서버 런타임 라이브러리(전송 계층 위)에서 발생하는 예외가 클라이언트에 전파됩니다. 예외는 서버 전송 수준에서 전파되지 않습니다. RPC 런타임에 오류를 반환하는 서버 루틴에 권장되는 방법은 예외를 throw하는 것입니다. 서버 루틴은 서버 루틴 간에 오류를 전달하는 데 적합한 방법을 사용할 수 있지만 원격 프로시저를 실행할 수 없는 오류가 발생하는 경우 서버 루틴만 오류로 인식하는 값을 RPC에 반환하지 않고 정리 후 RPC 런타임으로 돌아가기 전에 예외를 발생시켜야 합니다.
다음 그림에서는 예외가 서버에서 클라이언트로 반환되는 방법을 보여 줍니다.
각 rpc 런타임을 통해 서버에서 클라이언트로 반환됩니다.
RPC 예외 처리기는 TRY, FINALLY, 및 CATCH와 같은 Open Software Foundation-Distributed 컴퓨팅 환경(OSF-DCE) 예외 처리 매크로와 약간 다릅니다. 다양한 공급업체는 TRY, CATCH, CATCH_ALL및 ENDTRY포함하여 OSF-DCE RPC 함수를 Microsoft RPC 함수에 매핑하는 파일을 제공합니다. 또한 이러한 헤더 파일은 RPC_S_* 오류 코드를 OSF-DCE 예외 대응 코드인 rpc_s_*에 매핑하고 RPC_X_* 오류 코드를 rpc_x_*에 매핑합니다. OSF-DCE 이식성을 위해 다음의 포함 파일들을 사용하십시오. RPC 예외 처리기에 대한 자세한 내용은 RpcExceptionFilter, RpcExcept, RpcFinally참조하세요. Windows 예외 처리기에 대한 자세한 내용은 구조적 예외 처리참조하세요.