암시적 바인딩 핸들
암시적 바인딩 핸들을 사용하면 애플리케이션이 원격 프로시저 호출을 실행할 특정 서버를 선택할 수 있습니다. 자세한 내용은 클라이언트 쪽 바인딩을 참조하세요. 또한 클라이언트/서버 프로그램에서 인증된 바인딩을 사용할 수 있도록 합니다. 즉, 클라이언트는 암시적 바인딩 핸들에서 인증 정보를 지정할 수 있습니다. RPC 런타임 라이브러리는 인증 정보를 사용하여 클라이언트와 서버 간에 인증된 RPC 세션을 설정합니다. 자세한 내용은 보안을 참조하세요.
참고
암시적 바인딩 핸들은 스레드로부터 안전하지 않습니다. 따라서 다중 스레드 애플리케이션은 암시적 바인딩 핸들을 사용하지 않아야 합니다.
애플리케이션에서 암시적 바인딩을 사용하는 경우 클라이언트는 바인딩 정보를 설정하여 바인딩을 만들 수 있도록 해야 합니다. 클라이언트가 암시적 바인딩을 만든 후에는 바인딩 핸들을 원격 프로시저에 전달할 필요가 없습니다. RPC 라이브러리는 통신 세션의 나머지 메커니즘을 처리합니다.
클라이언트는 암시적 핸들에 대한 바인딩 정보를 전역 변수에 저장합니다. MIDL 컴파일러가 MIDL 파일의 인터페이스 사양에서 클라이언트 스텁 및 헤더 파일을 생성하면 전역 바인딩 핸들 변수에 대한 코드도 생성됩니다. 클라이언트 프로그램은 핸들을 초기화한 다음 바인딩을 삭제할 때까지 핸들을 다시 참조하지 않습니다.
다음과 같이 인터페이스에 대한 ACF에서 [implicit_handle] 특성을 지정하여 암시적 핸들을 만듭니다.
/* ACF file (complete) */
[
implicit_handle(handle_t hHello)
]
interface hello
{
}
앞의 예제에서 사용되는 handle_t 형식은 바인딩 핸들을 정의하는 데 사용되는 MIDL 데이터 형식입니다.
암시적 핸들을 만든 후 애플리케이션은 RPC 런타임 라이브러리 함수에 대한 매개 변수로 사용해야 합니다. 암시적 핸들을 원격 프로시저 호출에 대한 매개 변수로 사용하지 마세요. 다음 코드 샘플에서는 암시적 바인딩 핸들을 사용하는 방법을 보여 줍니다.
RPC_STATUS status;
status = RpcBindingFromStringBinding(
pszStringBinding,
&hHello);
status = MyRemoteProcedure();
status = RpcBindingFree(hHello);
...
앞의 예제에서 RPC 런타임 라이브러리 함수 RpcBindingFromStringBinding 및 RpcBindingFree 는 모두 매개 변수 목록에 암시적 바인딩 핸들을 전달해야 했습니다. 그러나 원격 프로시저 MyRemoteProcedure는 RPC 런타임 라이브러리 함수가 아니므로 그렇지 않았습니다.