Udostępnij przez


Interfejsy serwera reklamowego

Po stronie serwera aplikacji korzystającej z automatycznych dojść należy wywołać funkcję RpcNsBindingExport, aby udostępnić informacje o serwerze dostępnym dla klientów. Uchwyty automatycznego wiązania wymagają działającej na serwerze i dostępnej dla klienta usługi nazw. Implementacja usługi nazw firmy Microsoft, Lokalizator firmy Microsoft, zarządza automatycznymi dojściami. Aplikacje serwera używające uchwytów implicitnych i explicytnych powiązań mogą również reklamować swoją obecność w bazie danych usług nazw.

Zazwyczaj serwer wywołuje następujące funkcje czasu wykonywania:

/* auto handle server application (fragment) */
 
//interface header file that the MIDL compiler generates
#include "auto.h" 
 
void main(void)
{
    RpcUseProtseqEp(...);
    RpcServerRegisterIf(...);
    RpcServerInqBindings(...);
    RpcNsBindingExport(...);
    ...
}

Wywołania pierwszych dwóch funkcji w tym fragmentcie kodu są podobne do przykładu Hello, World. Te funkcje udostępniają klientowi informacje o powiązaniu. Wywołania RpcServerInqBindings i RpcNsBindingExport umieściły informacje w bazie danych usługi nazw. Wywołanie RpcServerInqBindings wypełnia wektor powiązań prawidłowymi uchwytami, zanim uchwyty zostaną wyeksportowane do usługi nazw. Gdy program serwera eksportuje dojścia do bazy danych, klient (lub wycinki klienta) może wywołać RpcNsBindingImportBegin i RpcNsBindingImportNext w celu uzyskania tych informacji. Aby uzyskać szczegółowe informacje, patrz w Znajdowanie systemów hostujących serwery.

Wywołania RpcServerInqBindings i RpcNsBindingExport oraz ich odpowiednie struktury danych wyglądają podobnie do następujących:

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

Należy pamiętać, że parametr RpcServerInqBindingspBindingVector jest wskaźnikiem do wskaźnika RPC_BINDING_VECTOR. Należy również pamiętać, że każde wywołanie RpcNsBindingExport musi być następująco poprzedzone wywołaniem RpcBindingVectorFree.

Aby usunąć wyeksportowany interfejs z bazy danych usługi nazw, serwer wywołuje RpcNsBindingUnexport, jak pokazano:

status = RpcNsBindingUnexport(
                fNameSyntaxType, 
                pszAutoEntryName,  
                auto_ServerIfHandle,
                NULL);              // unexport handles only

Funkcja RpcNsBindingUnexport powinna być używana tylko wtedy, gdy usługa jest trwale usuwana. Nie należy jej używać, gdy usługa jest tymczasowo wyłączona, na przykład po zamknięciu serwera na potrzeby konserwacji. Program serwera może zarejestrować się w bazie danych usługi nazw, ale będzie niedostępny, ponieważ serwer jest tymczasowo w trybie offline. Aplikacja kliencka powinna zawierać kod obsługi wyjątków dla takiego warunku.

Aby uzyskać więcej informacji na temat zawartości i formatu bazy danych usługi nazw, zobacz Baza danych usługi nazw RPC.

Aplikacje mogą korzystać z usługi Active Directory, jeśli programy klienckie i serwerowe działają w systemie Windows 2000. Komputery z uruchomionymi programami klienckimi i serwerowymi muszą należeć do domeny systemu Windows 2000.

Aby anonsować swoją obecność przy użyciu usługi Active Directory, program serwera powinien działać w kontekście zabezpieczeń administratora domeny. Jeśli jest on uruchomiony w kontekście użytkowników domeny, administrator domeny musi zmodyfikować listę kontroli dostępu (ACL) w kontenerze usług RPC. Aby uzyskać więcej informacji, zobacz dokumentację usługi Active Directory.