Поделиться через


Функция RpcEpRegisterNoReplaceA (rpcdce.h)

Функция RpcEpRegisterNoReplace добавляет сведения об адресе сервера в локальную базу данных сопоставления конечных точек.

Синтаксис

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

Параметры

IfSpec

Интерфейс для регистрации в локальной базе данных карты конечных точек.

BindingVector

Указатель на вектор дескрипторов привязки, по которым сервер может принимать удаленные вызовы процедур.

UuidVector

Указатель на вектор объектов UUID, предлагаемых сервером. Серверное приложение создает этот вектор.

Значение параметра NULL указывает на отсутствие идентификаторов UUID объекта для регистрации.

Annotation

Указатель на символьный комментарий, примененный к каждому элементу кросс-продукта, добавленному в локальную базу данных на карте конечных точек. Строка может содержать до 64 символов, включая символ конца null. Укажите значение NULL или строку, завершаемую null ("\0"), если строка заметки отсутствует.

Строка заметки используется приложениями только для получения сведений. RPC не использует эту строку для определения экземпляра сервера, с которым взаимодействует клиент, или для перечисления элементов в базе данных сопоставления конечных точек.

Возвращаемое значение

Значение Значение
RPC_S_OK
Вызов выполнен успешно.
RPC_S_NO_BINDINGS
Нет привязок.
RPC_S_INVALID_BINDING
Недопустимый дескриптор привязки.
RPC_S_WRONG_KIND_OF_BINDING
Это был неправильный тип привязки для операции.
 
Примечание Список допустимых кодов ошибок см. в разделе Возвращаемые значения RPC.
 

Комментарии

Функция RpcEpRegisterNoReplace добавляет записи в базу данных сопоставления конечных точек локального узла. Эта функция не заменяет существующие записи базы данных.

Сервер использует RpcEpRegisterNoReplace , а не RpcEpRegister , если несколько экземпляров сервера будут работать на одном узле. Иными словами, используйте эту функцию, если несколько экземпляров сервера в любой момент времени будут предлагать один и тот же интерфейс UUID, объект UUID и последовательность протокола.

Так как записи не заменяются при вызове RpcEpRegisterNoReplace, серверы должны отменить регистрацию перед остановкой работы. В противном случае устаревшие данные накапливаются каждый раз, когда экземпляр сервера перестает работать без вызова RpcEpUnregister. Устаревшие записи повышают вероятность того, что клиент получит конечные точки на несуществующих серверах. Клиент будет тратить время на попытку взаимодействия с несуществующим сервером, прежде чем получить другую конечную точку.

Сервер может использовать RpcEpRegister и RpcEpRegisterNoReplace для регистрации записей в базе данных сопоставителя конечных точек. До Windows 2000 были доступны две функции, позволяющие серверу перезаписывать устаревшие записи в базе данных сопоставителя конечных точек, оставшейся от предыдущих экземпляров сервера, которые больше не работают. База данных сопоставителя конечных точек автоматически удаляет записи, зарегистрированные экземпляром сервера, как только сервер перестает работать. Однако серверы не могут заменять записи сопоставителя конечных точек другого сервера в целях безопасности. Таким образом, RpcEpRegister и RpcEpRegisterNoReplace выполняют практически одинаковые функции.

Серверное приложение вызывает RpcEpRegister для регистрации конечных точек, указанных путем вызова любой из следующих функций:

Если сервер также выполняет экспорт в базу данных name-service, сервер вызывает RpcEpRegister с теми же значениями IfSpec, BindingVector и UuidVector , которые использовались при вызове функции RpcNsBindingExport .

Если последовательность протоколов используется без указания конечной точки, библиотека времени выполнения RPC автоматически создает динамическую конечную точку. В этом случае сервер может вызвать RpcServerInqBindings , а затем RpcEpRegisterNoReplace , чтобы сделать себя доступным для нескольких клиентов. В противном случае автоматически запущенный сервер будет известен только клиенту, для которого был запущен сервер.

Каждый элемент, добавленный в базу данных схемы конечных точек, логически содержит следующее:

  • UUID интерфейса
  • Версия интерфейса (основной и дополнительный)
  • Дескриптор привязки
  • Объект UUID (необязательно)
  • Заметка (необязательно)
RpcEpRegisterNoReplace создает кросс-продукт на основе параметров IfSpec, BindingVector и UuidVector и добавляет каждый элемент в кросс-продукт в качестве отдельной регистрации в базе данных на карте конечных точек.

Примечание

Заголовок rpcdce.h определяет RpcEpRegisterNoReplace в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header rpcdce.h (включая Rpc.h)
Библиотека Rpcrt4.lib
DLL Rpcrt4.dll

См. также раздел

RpcBindingFromStringBinding

RpcEpRegister

RpcEpUnregister

RpcNsBindingExport

RpcServerInqBindings

RpcServerUseAllProtseqs

RpcServerUseAllProtseqsIf

RpcServerUseProtseq

RpcServerUseProtseqEp

RpcServerUseProtseqIf