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


Интерфейсы сервера рекламы

Серверная сторона приложения, использующего автоматические дескрипторы, должна вызывать функцию 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.