엔드포인트 지정

엔드포인트는 원격 프로시저 호출을 위한 서버 프로세스의 네트워크별 주소입니다. 엔드포인트의 실제 이름은 사용된 프로토콜 시퀀스에 따라 달라집니다. 예를 들어 TCP, UDP 및 HTTP는 포트를 사용합니다. 명명된 파이프는 명명된 파이프 이름을 사용합니다. 클라이언트/서버 애플리케이션은 잘 알려진 엔드포인트 또는 동적 엔드포인트를 사용할 수 있습니다. 이 섹션에서는 서버 프로그램에서 잘 알려진 동적 엔드포인트를 지정하는 데 사용하는 기술을 제공합니다. 정보는 다음 topics 설명합니다.

잘 알려진 엔드포인트 지정

서버에서 잘 알려진 엔드포인트를 사용하는 경우 엔드포인트 데이터를 이름 서비스 데이터베이스 항목의 일부로 포함할 수 있습니다. 이 경우 클라이언트의 바인딩 핸들에는 클라이언트가 서버 항목에서 바인딩 핸들을 가져올 때 잘 알려진 엔드포인트를 포함하는 전체 서버 주소가 포함됩니다.

서버 프로그램은 프로토콜 시퀀스를 지정하는 동시에 잘 알려진 엔드포인트를 지정할 수도 있습니다. RpcServerUseProtseqEp 또는 RpcServerUseProtseqEpEx 함수를 호출합니다. 두 함수의 차이점은 후자의 함수에 서버가 동적 포트 할당을 제어하는 데 사용할 수 있는 추가 매개 변수가 있다는 것입니다.

서버 프로그램에서 이러한 방식으로 엔드포인트 정보를 지정하는 경우 RpcEpRegister 함수를 호출하여 엔드포인트 맵에 엔드포인트를 등록해야 합니다. 엔드포인트가 항상 동일하더라도 클라이언트는 엔드포인트 맵을 사용하여 서버를 찾을 수 있습니다.

프로토콜 시퀀스처럼 애플리케이션은 IDL 파일에서 엔드포인트 정보를 지정할 수 있습니다. 이 경우 RpcServerUseAllProtseqsIf 또는 RpcServerUseAllProtseqsIfEx 함수를 호출하여 프로토콜 시퀀스와 엔드포인트를 동시에 등록해야 합니다. 이 경우 클라이언트는 IDL 파일의 인터페이스 사양을 통해 엔드포인트 정보에 액세스할 수 있습니다. 따라서 RpcEpRegister 함수를 호출할 필요가 없습니다.

동적 엔드포인트 지정

동적 엔드포인트는 서버 호스트 컴퓨터가 서버 실행을 시작할 때 할당하는 엔드포인트입니다. 대부분의 서버 애플리케이션은 동적 엔드포인트를 사용하여 서버 호스트 컴퓨터 시스템에서 사용할 수 있는 제한된 수의 포트를 통해 다른 프로그램과 충돌하지 않도록 합니다. 그러나 명명된 파이프 또는 ncalrpc 프로토콜 시퀀스를 사용하는 프로그램에는 매우 큰 엔드포인트 이름 공간이 있습니다. 다른 전송을 사용하는 프로그램보다 동적 엔드포인트의 이점을 덜 누릴 수 있습니다.

서버 프로그램은 엔드포인트 맵 데이터베이스에 동적 엔드포인트를 등록합니다. 서버에서 사용 가능한 엔드포인트를 사용하려면 RpcServerUseAllProtSeqs, RpcServerUseAllProtseqsEx, RpcServerUseProtseq 또는 RpcServerUseProtseqEx를 호출합니다. 이렇게 하면 RPC 런타임 라이브러리가 동적 엔드포인트에서 유효한 프로토콜 시퀀스를 모두 또는 하나만 사용하도록 설정합니다. 그런 다음 서버는 RpcServerInqBindings를 호출하여 유효한 바인딩 핸들 집합을 가져와야 합니다. 서버는 바인딩 핸들 집합 또는 바인딩 벡터를 RpcEpRegister 함수에 전달하여 엔드포인트 맵에 적합한 모든 엔드포인트를 등록합니다. 서버가 RpcEpRegister를 호출할 때마다 바인딩 벡터에서 사용하는 메모리를 해제하기 위해 RpcBindingVectorFree 에 대한 해당 호출이 있어야 합니다.

서버 프로그램은 RpcEpRegister 대신 RpcEpRegisterNoReplace 함수 사용할 수 있습니다. 서버 프로그램의 여러 복사본이 서버 호스트 시스템에서 실행되어야 하는 경우 프로그램은 일반적으로 RpcEpRegisterNoReplace 를 사용합니다.

RpcEpRegisterRpcEpRegisterNoReplace 함수는 모두 서버의 인터페이스 및 바인딩 핸들을 엔드포인트 매퍼 데이터베이스에 추가합니다. 클라이언트가 부분적으로 바인딩된 핸들을 사용하여 원격 프로시저를 호출하면 클라이언트의 런타임 라이브러리는 서버 컴퓨터의 엔드포인트 매퍼에 호환되는 서버 instance 엔드포인트를 요청합니다. 클라이언트 라이브러리는 인터페이스 UUID, 프로토콜 시퀀스 및 있는 경우 클라이언트 바인딩 핸들의 개체 UUID를 제공합니다. 엔드포인트 매퍼는 클라이언트의 정보와 일치하는 데이터베이스 항목을 찾습니다. 클라이언트/서버 인터페이스 UUID, 인터페이스 주 버전 및 프로토콜 시퀀스는 모두 정확히 일치해야 합니다. 또한 서버의 인터페이스 부 버전은 클라이언트의 부 버전보다 크거나 같아야 합니다.

모든 테스트가 성공하면 엔드포인트 매퍼는 유효한 엔드포인트를 반환하고 클라이언트 런타임 라이브러리는 바인딩 핸들의 엔드포인트를 업데이트합니다.

동적 엔드포인트는 서버 프로세스 실행을 중지하면 엔드포인트 매퍼 데이터베이스에서 자동으로 제거됩니다. RpcEpUnregister 함수를 사용하여 서버 프로그램이 종료되기 전에 엔드포인트 매퍼 데이터베이스에서 엔드포인트를 제거하거나 자동 정리를 허용하여 엔드포인트 제거를 관리할 수 있습니다.