Werbeserverschnittstellen
Die Serverseite einer Anwendung, die automatische Handles verwendet, muss die Funktion RpcNsBindingExport aufrufen, um Bindungsinformationen zum Server für Clients verfügbar zu machen. Automatische Bindungshandles erfordern einen Namensdienst, der auf einem Server ausgeführt wird, auf den der Client zugreifen kann. Die Microsoft-Implementierung des Namensdiensts Microsoft Locator verwaltet automatische Handles. Serveranwendungen, die implizite und explizite Bindungshandles verwenden, können auch ihre Anwesenheit in der Namensdienstdatenbank ankündigen.
In der Regel ruft der Server die folgenden Laufzeitfunktionen auf:
/* auto handle server application (fragment) */
//interface header file that the MIDL compiler generates
#include "auto.h"
void main(void)
{
RpcUseProtseqEp(...);
RpcServerRegisterIf(...);
RpcServerInqBindings(...);
RpcNsBindingExport(...);
...
}
Die Aufrufe der ersten beiden Funktionen in diesem Codefragment ähneln dem Beispiel "Hello, World". Diese Funktionen stellen dem Client Informationen über die Bindung zur Verfügung. Die Aufrufe von RpcServerInqBindings und RpcNsBindingExport platzieren die Informationen in der Namensdienstdatenbank. Der Aufruf von RpcServerInqBindings füllt den Bindungsvektor mit gültigen Bindungshandles, bevor die Handles in den Namensdienst exportiert werden. Nachdem das Serverprogramm die Handles in die Datenbank exportiert hat, kann der Client (oder client stubs) RpcNsBindingImportBegin und RpcNsBindingImportNext aufrufen, um diese Informationen abzurufen. Ausführliche Informationen finden Sie unter Suchen nach Serverhostsystemen.
Die Aufrufe von RpcServerInqBindings und RpcNsBindingExport und den zugehörigen Datenstrukturen sehen wie folgt aus:
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
Beachten Sie, dass der RpcServerInqBindings-ParameterpBindingVector ein Zeiger auf einen Zeiger auf RPC_BINDING_VECTOR ist. Denken Sie auch daran, dass jedem Aufruf von RpcNsBindingExport ein Aufruf von RpcBindingVectorFree folgen muss.
Um die exportierte Schnittstelle aus der Namensdienstdatenbank zu entfernen, ruft der Server RpcNsBindingUnexport wie gezeigt auf:
status = RpcNsBindingUnexport(
fNameSyntaxType,
pszAutoEntryName,
auto_ServerIfHandle,
NULL); // unexport handles only
Die RpcNsBindingUnexport-Funktion sollte nur verwendet werden, wenn der Dienst dauerhaft entfernt wird. Es sollte nicht verwendet werden, wenn der Dienst vorübergehend deaktiviert wird, z. B. wenn der Server zur Wartung heruntergefahren wird. Ein Serverprogramm kann sich bei der Namensdienstdatenbank registrieren, ist aber nicht verfügbar, da der Server vorübergehend offline ist. Die Clientanwendung sollte Ausnahmebehandlungscode für eine solche Bedingung enthalten.
Weitere Informationen zu Inhalt und Format der Namensdienstdatenbank finden Sie unter Rpc Name Service Database.
Anwendungen können den Active Directory-Dienst verwenden, wenn sowohl die Client- als auch die Serverprogramme unter Windows 2000 ausgeführt werden. Die Computer, auf denen die Client- und Serverprogramme ausgeführt werden, müssen Mitglieder einer Windows 2000-Domäne sein.
Um seine Anwesenheit mithilfe des Active Directory-Diensts anzukündigen, sollte das Serverprogramm im Sicherheitskontext eines Domänenadministrators ausgeführt werden. Wenn sie im Kontext von Domänenbenutzern ausgeführt wird, muss ein Domänenadministrator die Zugriffssteuerungsliste (Access Control List, ACL) für den RPC Services-Container ändern. Weitere Informationen finden Sie in der Active Directory-Dokumentation.