다음을 통해 공유


네트워크에서 서버를 사용할 수 있도록 설정

서버 애플리케이션이 원격 프로시저 호출을 수락하려면 먼저 네트워크에서 사용할 수 있어야 합니다. 이를 위해 서버는 RPC 런타임에 하나 이상의 프로토콜 시퀀스에 대한 호출을 수락할 의사가 있음을 나타냅니다. 서버 애플리케이션에서 지원하는 프로토콜 시퀀스를 선택하는 것은 중요한 결정입니다. 서로 다른 프로토콜 시퀀스에는 매우 다른 기능이 있습니다. 로컬로 호출을 수신해야 하는 서버는 ncalrpc를 사용해야 합니다. 원격 호출을 수락하는 서버는 ncacn_ip_tcp 사용해야 합니다. 서버는 호출을 수신하는 프로토콜 시퀀스가 호출을 받을 것으로 예상되는 프로토콜 시퀀스인지 확인해서는 안 됩니다. 자세한 내용은 동일한 프로세스에서 실행되는 다른 RPC 엔드포인트에 주의하세요.

다음 코드 예제에서는 ncacn_ip_tcp 사용합니다.

대부분의 서버 프로그램은 네트워크에서 사용할 수 있는 모든 프로토콜 시퀀스를 사용합니다. 이를 위해 다음 코드 조각과 같이 RpcServerUseProtseq 함수를 호출합니다.

RPC_STATUS status;
status = RpcServerUseProtseq(
    L"ncacn_ip_tcp",
    RPC_C_PROTSEQ_MAX_REQS_DEFAULT,    // Protseq-dependent parameter
    NULL);                             // Always specify NULL here.

RpcServerUseProtseq 함수에 대한 첫 번째 매개 변수는 프로토콜 시퀀스입니다. 두 번째 매개 변수는 프로토콜 시퀀스에 따라 달라집니다. 코드 예제에 설명된 것처럼 대부분의 서버 프로그램은 해당 매개 변수를 RPC_C_PROTSEQ_MAX_REQS_DEFAULT 설정합니다. 이 값은 기본값을 사용하도록 RPC 라이브러리를 설정합니다. 세 번째 매개 변수는 보안 설명자이며 앱에서 사용하면 안 됩니다. 자세한 내용은 RPC(보안)를 참조하세요.

RpcServerUseAllProtseqs, RpcServerUseProtseqEx, RpcServerUseProtseqEp 또는 RpcServerUseProtseqEpEx 함수를 호출할 수도 있습니다.

서버 애플리케이션이 하나 이상의 프로토콜 시퀀스를 선택한 후 동적 엔드포인트를 사용하는 서버는 사용하는 각 프로토콜 시퀀스에 대한 바인딩 정보를 만들어야 합니다. 서버는 바인딩 정보를 바인딩 벡터에 저장한 다음 엔드포인트 매퍼 서비스로 내보낼 수 있습니다.

다음 예제와 같이 RpcServerInqBindings 함수를 사용하여 서버 애플리케이션에 대한 바인딩 벡터를 가져옵니다.

RPC_STATUS status;
RPC_BINDING_VECTOR *rpcBindingVector;
 
status = RpcServerInqBindings(&rpcBindingVector);

RpcServerInqBindings 함수에 전달되는 유일한 매개 변수는 RPC_BINDING_VECTOR 구조체에 대한 포인터에 대한 포인터입니다. RPC 런타임 라이브러리는 바인딩 벡터 배열을 동적으로 할당하고 해당 매개 변수 변수(이 경우 rpcBindingVector)에 배열의 주소를 저장합니다. 서버 앱이 해당 바인딩 벡터 사용을 마치면(예: 적절한 함수에 전달한 후) 서버 앱은 RpcBindingVectorFree 함수를 사용하여 해당 바인딩 벡터를 해제합니다.