Функция RpcNsBindingLookupNext (rpcnsi.h)

Функция RpcNsBindingLookupNext возвращает список совместимых дескрипторов привязки для указанного интерфейса и при необходимости объекта .

Примечание Эта функция не поддерживается в операционных системах Windows Vista и более поздних версий.
 

Синтаксис

RPC_STATUS RpcNsBindingLookupNext(
  RPC_NS_HANDLE      LookupContext,
  RPC_BINDING_VECTOR **BindingVec
);

Параметры

LookupContext

Дескриптор службы имен, возвращенный функцией RpcNsBindingLookupBegin .

BindingVec

Возвращает адрес указателя на вектор совместимых с клиентом дескрипторов привязки сервера.

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

Значение Значение
RPC_S_OK
Вызов выполнен успешно.
RPC_S_NO_MORE_BINDINGS
Больше нет привязок.
RPC_S_NAME_SERVICE_UNAVAILABLE
Служба имен недоступна.
 
Примечание Список допустимых кодов ошибок см. в разделе Возвращаемые значения RPC.
 

Комментарии

Функция RpcNsBindingLookupNext возвращает вектор совместимых с клиентом дескрипторов привязки сервера для сервера, предлагающего интерфейс и объект UUID, заданные параметрами IfSpec и ObjUuid в функции RpcNsBindingLookupBegin . (Сравните это с RpcNsBindingImportNext, который возвращает один совместимый дескриптор привязки сервера.)

Функция RpcNsBindingLookupNext взаимодействует только с базой данных службы имен, а не напрямую с серверами.

В windows 2000 среда RPC использует Active Directory в качестве базы данных службы имен, а порядок, в котором среда выполнения выполняет поиск, выглядит следующим образом:

  • Выполните поиск в локальном кэше.
  • Если запись не найдена в локальном кэше, выполните поиск в Active Directory этого компьютера.
  • Если запись не найдена на локальном компьютере, отправьте широковещательные запросы во все остальные службы Active Directory в домене.

    Обратите внимание, что если запись существует в Active Directory, но с ней нет сведений, среда выполнения не будет выдавать этот широковещательный запрос.

При последовательных вызовах функция RpcNsBindingLookupNext просматривает записи базы данных службы имен, собирая совместимые с клиентом дескрипторы привязки сервера из каждой записи.

Если Microsoft Active Directory является базой данных службы имен, RpcNsBindingLookupNext проходит по базе данных, только если заданное имя записи равно NULL , а запись по умолчанию (в реестре) не определена или пуста. Кроме того, так как смешанные записи не разрешены в Active Directory, функция ищет только имена записей сервера, а не групп или профилей.

Если служба каталогов ячеек DCE (CDS) является базой данных службы имен, а запись, с которой начинается поиск, содержит дескрипторы привязки в дополнение к именам групп или профилей, RpcNsBindingLookupNext возвращает дескрипторы привязки из EntryName перед поиском в группе или профиле. Это означает, что функция может вернуть частично полный вектор перед обработкой членов группы или профиля.

Возвращаемый совместимый дескриптор привязки всегда содержит объект UUID, значение которого зависит от параметра ObjUuid в функции RpcNsBindingImportBegin . Если указан UUID объекта, отличного от NULL , возвращенный дескриптор привязки содержит этот объект UUID. Однако если указан пустой объект UUID или значение NULL , возвращаемый объект UUID является результатом следующих возможностей:

  • Если сервер не экспортировал идентификаторы UUID объекта, возвращенный дескриптор привязки содержит UUID объекта nil.
  • Если сервер экспортировал один UUID объекта, возвращенный дескриптор привязки содержит этот объект UUID.
  • Если сервер экспортировал несколько UUID объектов, возвращенный дескриптор привязки содержит один из идентификаторов UUID объекта. Операция import-next выбирает возвращенный объект UUID недетерминированным образом. В результате для каждого совместимого дескриптора привязки из одной записи сервера можно вернуть UUID другого объекта.
Из возвращаемого вектора дескрипторов привязки сервера клиентское приложение может использовать собственные критерии для выбора отдельных дескрипторов привязки, или приложение может вызвать функцию RpcNsBindingSelect для выбора дескриптора привязки. Функции RpcBindingToStringBinding и RpcStringBindingParse будут полезны для клиента, создающего собственные критерии выбора.

Клиентское приложение может использовать выбранный дескриптор привязки, чтобы попытаться выполнить удаленный вызов процедуры к серверу. Если клиенту не удается установить связь с сервером, он может выбрать другой дескриптор привязки из вектора. После использования всех дескрипторов привязки в векторе клиентское приложение снова вызывает RpcNsBindingLookupNext .

Каждый раз, когда клиент вызывает RpcNsBindingLookupNext, функция возвращает другой вектор дескрипторов привязки. Дескрипторы привязки, возвращаемые в каждом векторе, не упорядочены. Векторы, возвращаемые несколькими вызовами этой функции, также не упорядочены.

Клиент вызывает функцию RpcNsBindingInqEntryName , чтобы получить имя записи сервера базы данных службы имен, из которую поступила привязка.

Когда поиск достигает конца базы данных службы имен, RpcNsBindingLookupNext возвращает состояние RPC_S_NO_MORE_BINDINGS и значение BindingVec , равное NULL.

Функция RpcNsBindingLookupNext выделяет хранилище для данных, на которые ссылается возвращаемый параметр BindingVec . Когда клиентское приложение завершает работу с вектором, оно должно вызвать функцию RpcBindingVectorFree , чтобы освободить хранилище. Для каждого вызова RpcNsBindingLookupNext требуется соответствующий вызов RpcBindingVectorFree.

Клиент отвечает за вызов функции RpcNsBindingLookupDone для удаления контекста подстановки или, если вы хотите, чтобы приложение начало новый поиск совместимых серверов.

Требования

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

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

RpcBindingToStringBinding

RpcBindingVectorFree

RpcNsBindingInqEntryName

RpcNsBindingLookupBegin

RpcNsBindingLookupDone

RpcStringBindingParse