Интерфейсы сервера рекламы
Серверная часть приложения, использующего автоматические дескрипторы, должна вызывать функцию RpcNsBindingExport , чтобы сделать сведения о привязке сервера доступными для клиентов. Для автоматического дескриптора привязки требуется служба имен, запущенная на сервере, доступном клиенту. Реализация службы имен (Microsoft Locator) управляет автоматическими дескрипторами. Серверные приложения, использующие неявные и явные дескрипторы привязки, также могут объявлять свое присутствие в базе данных службы имен.
Как правило, сервер вызывает следующие функции времени выполнения:
/* auto handle server application (fragment) */
//interface header file that the MIDL compiler generates
#include "auto.h"
void main(void)
{
RpcUseProtseqEp(...);
RpcServerRegisterIf(...);
RpcServerInqBindings(...);
RpcNsBindingExport(...);
...
}
Вызовы первых двух функций в этом фрагменте кода похожи на пример Hello, World. Эти функции делают сведения о привязке доступными для клиента. Вызовы RpcServerInqBindings и RpcNsBindingExport помещают сведения в базу данных службы имен. Вызов RpcServerInqBindings заполняет вектор привязки допустимыми дескрипторами привязки перед экспортом дескрипторов в службу имен. После того как серверная программа экспортирует дескрипторы в базу данных, клиент (или клиентские заглушки) может вызвать RpcNsBindingImportBegin и RpcNsBindingImportNext для получения этих сведений. Дополнительные сведения см. в разделе Поиск систем узла сервера.
Вызовы RpcServerInqBindings и RpcNsBindingExport и связанные с ними структуры данных выглядят следующим образом:
RPC_BINDING_VECTOR * pBindingVector;
RPCSTATUS status;
status = RpcServerInqBindings(&pBindingVector);
status = RpcNsBindingExport(
fNameSyntaxType, // name syntax type
pszAutoEntryName, // nsi entry name
autoh_ServerIfHandle, // if server handle
pBindingVector, // set in previous call
NULL); // UUID vector
Обратите внимание, что параметр RpcServerInqBindingspBindingVector является указателем на RPC_BINDING_VECTOR. Также помните, что за каждым вызовом RpcNsBindingExport должен следовать вызов RpcBindingVectorFree.
Чтобы удалить экспортированный интерфейс из базы данных службы имен, сервер вызывает RpcNsBindingUnexport , как показано ниже:
status = RpcNsBindingUnexport(
fNameSyntaxType,
pszAutoEntryName,
auto_ServerIfHandle,
NULL); // unexport handles only
Функция RpcNsBindingUnexport должна использоваться только при окончательном удалении службы. Его не следует использовать при временном отключении службы, например при завершении работы сервера для обслуживания. Серверная программа может зарегистрировать себя в базе данных службы имен, но быть недоступной, так как сервер временно находится в автономном режиме. Клиентское приложение должно содержать код обработки исключений для такого условия.
Дополнительные сведения о содержимом и формате базы данных службы имен см. в разделе База данных службы имен RPC.
Приложения могут использовать службу Active Directory, если клиентские и серверные программы работают в Windows 2000. Компьютеры, на которых выполняются клиентские и серверные программы, должны быть членами домена Windows 2000.
Чтобы объявить о своем присутствии с помощью службы Active Directory, серверная программа должна выполняться в контексте безопасности администратора домена. Если он выполняется в контексте пользователей домена, администратор домена должен изменить список управления доступом (ACL) в контейнере служб RPC. Дополнительные сведения см. в документации по Active Directory.