프로토콜 시퀀스 지정
서버 애플리케이션은 네트워크를 통해 클라이언트와 통신할 때 사용할 프로토콜 시퀀스를 하나 이상 선택해야 합니다. 프로토콜 시퀀스 선택은 네트워크에 따라 다릅니다. 바인딩 정보 해석 및 프로토콜 시퀀스 선택을 참조하세요.
서버 프로그램에서 클라이언트가 네트워크에서 지원하는 프로토콜 시퀀스를 사용하여 연결할 수 있습니다. 이렇게 하려면 RpcServerUseAllProtseqs를 호출하고 RPC_C_PROTSEQ_MAX_REQS_DEFAULT 첫 번째 매개 변수로 전달합니다. 그러나 권장되는 방법은 아닙니다. 대신 로컬 호출에 ncalrpc 를 사용하고 원격 호출에 ncacn_ip_tcp 또는 ncacn_http 사용하는 것으로 충분합니다. 다른 유형의 네트워크는 일반적이지 않으며 거의 모든 네트워크에서 TCP/IP를 지원합니다.
클라이언트가 동적 엔드포인트에 대한 포트 할당을 특정 포트 범위로 제한하려면 RpcServerUseAllProtseqsEx 를 대신 호출합니다. 이 함수는 Microsoft RPC에만 적용되며 방화벽을 통과하는 원격 프로시저 호출에 매우 유용합니다. 추가 매개 변수를 사용하여 포트 할당 제어 플래그를 함수에 전달합니다. 포트 할당 및 선택적 바인딩에 대한 레지스트리 구성을 참조하세요.
서버의 인터페이스를 개발할 때 MIDL 파일에서 프로토콜 시퀀스 및 엔드포인트 정보를 지정할 수 있습니다. 이 경우 서버는 RpcServerUseAllProtseqsIf 를 사용하여 IDL 파일에 제공된 모든 프로토콜 시퀀스 및 연결된 엔드포인트 정보를 등록해야 합니다. 또한 서버가 포트 할당 제어 플래그를 전달할 수 있도록 하는 해당 RpcServerUseAllProtseqsIfEx 함수가 있습니다.
지정된 프로토콜 시퀀스와 통신하도록 클라이언트 및 서버 프로그램을 구성하려는 경우 서버 애플리케이션은 RpcServerUseProtseq를 호출해야 합니다. Microsoft RPC 프로토콜 시퀀스의 전체 목록은 프로토콜 시퀀스 상수를 참조하세요.
또한 Microsoft RPC는 애플리케이션이 특정 프로토콜 시퀀스를 선택하고 동적 포트 할당을 제어할 수 있도록 RpcServerUseProtseqEx 를 제공합니다.
Microsoft RPC는 연결 지향 프로토콜 외에도 데이터그램(연결 없는) 프로토콜도 지원합니다. 연결 지향 프로토콜을 사용하는 것이 좋습니다. 데이터그램 프로토콜에는 연결 지향 프로토콜과는 다른 기능 집합이 있으며 분산 시스템 개발자가 데이터그램 프로토콜에서만 사용할 수 있는 기능이 필요한 경우에만 사용해야 합니다. 데이터그램 프로토콜을 사용할 때 사용할 수 있는 몇 가지 기능은 다음과 같습니다.
- 데이터그램은 UDP 및 IPX 연결 없는 전송 프로토콜을 지원합니다.
- 연결을 설정하고 유지 관리할 필요가 없으므로 데이터그램 RPC 프로토콜에는 리소스 오버헤드가 줄어듭니다.
- 데이터그램을 사용하면 바인딩 속도가 빨라집니다.
- 연결 지향 RPC와 마찬가지로 데이터그램 RPC 호출은 기본적으로 nonidempotent입니다. 즉, 호출이 두 번 이상 실행되지 않도록 보장됩니다. 그러나 IDL 파일에서 함수를 idempotent로 표시하여 단일 클라이언트 요청에 대한 응답으로 함수를 두 번 이상 실행하는 것은 무해하다는 것을 RPC에 알릴 수 있습니다. 이렇게 하면 런타임에서 서버의 상태를 더 적게 유지할 수 있습니다. 불안정한 네트워크에서 드문 경우에만 멱등 호출이 다시 실행됩니다.
- Datagram RPC는 브로드캐 스트 IDL 특성을 지원합니다. 브로드캐스트를 사용하면 클라이언트가 동시에 여러 서버에 메시지를 실행할 수 있습니다. 이렇게 하면 클라이언트가 네트워크에서 사용 가능한 여러 서버 중 하나를 찾거나 여러 서버를 동시에 제어할 수 있습니다. 데이터그램 브로드캐스트는 로컬 링크 내에서만 유효하며 일반적으로 라우터를 교차하지 않습니다. 브로드캐스트 호출은 암시적으로 idempotent입니다. 호출에 [out] 매개 변수가 포함된 경우 첫 번째 서버 응답만 반환됩니다. 서버가 응답하면 브로드캐스트 특성이 있는 호출을 포함하여 해당 바인딩 핸들에 대한 모든 향후 RPC가 해당 서버로만 전송됩니다. 다른 브로드캐스트를 보내려면 새 바인딩 핸들을 만들거나 기존 핸들에서 RpcBindingReset 을 호출합니다.
- Datagram RPC는 IDL 특성을 지원합니다. 이렇게 하면 클라이언트가 응답 또는 확인을 기다리지 않고 서버에 대한 호출을 보낼 수 있습니다. 호출에는 [out] 매개 변수가 포함될 수 없습니다. [어쩌면] 호출을 사용하는 호출은 암시적으로 idempotent입니다.