RpcEpRegisterNoReplace 함수(rpcdce.h)

RpcEpRegisterNoReplace 함수는 로컬 엔드포인트 맵 데이터베이스에 서버 주소 정보를 추가합니다.

구문

RPC_STATUS RpcEpRegisterNoReplace(
  RPC_IF_HANDLE      IfSpec,
  RPC_BINDING_VECTOR *BindingVector,
  UUID_VECTOR        *UuidVector,
  RPC_CSTR           Annotation
);

매개 변수

IfSpec

로컬 엔드포인트 맵 데이터베이스에 등록할 인터페이스입니다.

BindingVector

서버가 원격 프로시저 호출을 받을 수 있는 바인딩 핸들의 벡터에 대한 포인터입니다.

UuidVector

서버에서 제공하는 개체 UUID의 벡터에 대한 포인터입니다. 서버 애플리케이션은 이 벡터를 생성합니다.

null 매개 변수 값은 등록할 개체 UUID가 없음을 나타냅니다.

Annotation

로컬 엔드포인트 맵 데이터베이스에 추가된 각 교차 제품 요소에 적용되는 문자 문자열 주석에 대한 포인터입니다. 문자열의 길이는 null로 끝나는 문자를 포함하여 최대 64자까지 가능합니다. 주석 문자열이 없는 경우 null 값 또는 null로 끝나는 문자열("\0")을 지정합니다.

주석 문자열은 정보 전용으로 애플리케이션에서 사용됩니다. RPC는 이 문자열을 사용하여 클라이언트가 통신하는 서버 instance 결정하거나 엔드포인트 맵 데이터베이스의 요소를 열거하지 않습니다.

반환 값

의미
RPC_S_OK
호출이 성공했습니다.
RPC_S_NO_BINDINGS
바인딩이 없습니다.
RPC_S_INVALID_BINDING
바인딩 핸들이 잘못되었습니다.
RPC_S_WRONG_KIND_OF_BINDING
작업에 대한 잘못된 종류의 바인딩이었습니다.
 
참고 유효한 오류 코드 목록은 RPC 반환 값을 참조하세요.
 

설명

RpcEpRegisterNoReplace 함수는 로컬 호스트의 엔드포인트 맵 데이터베이스에 항목을 추가합니다. 이 함수는 기존 데이터베이스 항목을 대체하지 않습니다.

서버의 여러 인스턴스가 동일한 호스트에서 실행되는 경우 서버는 RpcEpRegister 대신 RpcEpRegisterNoReplace를 사용합니다. 즉, 둘 이상의 서버 instance 한 번에 동일한 인터페이스 UUID, 개체 UUID 및 프로토콜 시퀀스를 제공하는 경우 이 함수를 사용합니다.

RpcEpRegisterNoReplace를 호출할 때 항목이 대체되지 않으므로 서버는 실행을 중지하기 전에 자체 등록을 취소해야 합니다. 그렇지 않으면 RpcEpUnregister를 호출하지 않고 서버 instance 실행을 중지할 때마다 부실 데이터가 누적됩니다. 부실 항목은 클라이언트가 존재하지 않는 서버에 엔드포인트를 수신할 가능성을 높입니다. 클라이언트는 다른 엔드포인트를 가져오기 전에 존재하지 않는 서버와 통신하는 데 시간을 할애합니다.

서버는 RpcEpRegisterRpcEpRegisterNoReplace 를 사용하여 엔드포인트 매퍼 데이터베이스에 항목을 등록할 수 있습니다. Windows 2000 이전에는 서버가 더 이상 실행되지 않는 이전 서버 인스턴스에서 남긴 엔드포인트 매퍼 데이터베이스의 부실 항목을 덮어쓸 수 있도록 두 가지 함수를 사용할 수 있었습니다. 엔드포인트 매퍼 데이터베이스는 서버가 작동을 중지하는 즉시 서버 instance 등록된 항목을 자동으로 제거합니다. 그러나 서버는 보안을 위해 다른 서버의 엔드포인트 매퍼 항목을 바꿀 수 없습니다. 따라서 RpcEpRegisterRpcEpRegisterNoReplace 는 대부분 동일한 기능을 수행합니다.

서버 애플리케이션은 RpcEpRegister 를 호출하여 다음 함수를 호출하여 지정된 엔드포인트를 등록합니다.

서버도 이름 서비스 데이터베이스로 내보내는 경우 서버는 RpcNsBindingExport 함수를 호출할 때 사용되는 동일한 IfSpec, BindingVectorUuidVector 값을 사용하여 RpcEpRegister를 호출합니다.

엔드포인트를 지정하지 않고 프로토콜 시퀀스를 사용하는 경우 RPC 런타임 라이브러리는 동적 엔드포인트를 자동으로 생성합니다. 이 경우 서버는 RpcServerInqBindingsRpcEpRegisterNoReplace 를 호출하여 여러 클라이언트에서 사용할 수 있도록 할 수 있습니다. 그렇지 않으면 자동으로 시작된 서버는 서버가 시작된 클라이언트에만 알려져 있습니다.

엔드포인트 맵 데이터베이스에 추가된 각 요소는 논리적으로 다음을 포함합니다.

  • 인터페이스 UUID
  • 인터페이스 버전(주 및 부 버전)
  • 바인딩 핸들
  • 개체 UUID(선택 사항)
  • 주석(선택 사항)
RpcEpRegisterNoReplaceIfSpec, BindingVectorUuidVector 매개 변수에서 교차 제품을 만들고 교차 제품의 각 요소를 엔드포인트 맵 데이터베이스에 별도의 등록으로 추가합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 rpcdce.h(Rpc.h 포함)
라이브러리 Rpcrt4.lib
DLL Rpcrt4.dll

추가 정보

RpcBindingFromStringBinding

RpcEpRegister

RpcEpUnregister

RpcNsBindingExport

RpcServerInqBindings

RpcServerUseAllProtseqs

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf