다음을 통해 공유


RPC(예외 처리)

RPC는 Windows API와 동일한 방식으로 예외 처리를 사용합니다.

RpcTryFinally / RpcFinally / RpcEndFinally 구조체는 Windows try-finally 문과 동일합니다. RPC 예외 구문 RpcTryExcept / RpcExcept / RpcEndExcept 는 Windows try-except 문과 동일합니다.

RPC 예외 처리기를 사용하는 경우 클라이언트 쪽 소스 코드는 이식 가능합니다. 각 플랫폼에 대해 제공되는 다양한 RPC 헤더 파일은 각 플랫폼에 대한 RpcTryRpcExcept 매크로를 resolve. Windows 환경에서 이러한 매크로는 Windows try-finallytry-except 문에 직접 매핑됩니다. 다른 환경에서 이러한 매크로는 예외 처리기의 다른 플랫폼별 구현에 매핑됩니다.

이러한 구조체에서 발생할 수 있는 예외로는 접두사 RPC_S_ 및 RPC_X RPC 함수에서 반환하는 오류 코드 집합과 Windows에서 반환된 예외 집합이 포함됩니다. 자세한 내용은 RPC 반환 값을 참조하세요.

RpcTryRpcExcept 매크로는 예외를 처리하는 사용자 지정 가능한 플랫폼 독립적 방법을 제공하지만 Windows Vista 이상 버전의 Windows에서는 RpcExceptionFilter가 예외를 처리하는 데 권장되는 방법입니다. 가장 일반적인 구조적 예외를 많이 캡처하기 위해 사용자 지정 필터를 작성할 필요는 없습니다. 그러나 사용자 지정 예외 필터에는 여전히 RpcExcept가 필요합니다.

서버 애플리케이션, 서버 스텁 및 서버 런타임 라이브러리(전송 계층 위)에서 발생하는 예외가 클라이언트에 전파됩니다. 예외는 서버 전송 수준에서 전파되지 않습니다. RPC 런타임에 오류를 반환하는 서버 루틴에 권장되는 방법은 예외를 throw하는 것입니다. 서버 루틴은 서버 루틴 간에 오류를 전달하는 데 적합한 메서드를 사용할 수 있지만 원격 프로시저를 실행할 수 없는 오류가 발생하는 경우 서버 루틴만 오류로 인식하는 값을 RPC에 반환하지 않고 정리 후 RPC 런타임으로 돌아가기 전에 예외를 발생시켜야 합니다.

다음 그림에서는 예외가 서버에서 클라이언트로 반환되는 방법을 보여 줍니다.

예외는 각 구성 요소의 각 rpc 런타임을 통해 서버에서 클라이언트로 반환됩니다.

RPC 예외 처리기는 OSF-DCE(Open Software Foundation-Distributed Computing Environment) 예외 처리 매크로 TRY, FINALLYCATCH와 약간 다릅니다. 다양한 공급업체는 OSF-DCE RPC 함수를 TRY, CATCH, CATCH_ALLENDTRY를 비롯한 Microsoft RPC 함수에 매핑하는 파일을 제공합니다. 또한 이러한 헤더 파일은 RPC_S_* 오류 코드를 OSF-DCE 예외 대응 코드인 rpc_s_*에 매핑하고 RPC_X_* 오류 코드를 rpc_x_*에 매핑합니다. OSF-DCE 이식성을 위해 다음 포함 파일을 사용합니다. RPC 예외 처리기에 대한 자세한 내용은 RpcExceptionFilter, RpcExcept, RpcFinally를 참조하세요. Windows 예외 처리기에 대한 자세한 내용은 구조적 예외 처리를 참조하세요.