Verwenden eines Sitzungsmonikers

Die Sitzungs-zu-Sitzung-Aktivierung ermöglicht es einem Clientprozess, einen lokalen Serverprozess für eine angegebene Sitzung zu aktivieren. Hierzu können Sie sitzungsbezogen einen vom System bereitgestellten Sitzungsmoniker verwenden. Weitere Informationen zum Erstellen eines Sitzungsmonikers finden Sie unter Session-to-Session Activation with a Session Moniker (Sitzungs-zu-Sitzungsaktivierung mit einem Sitzungsmoniker).

Das folgende Beispiel zeigt, wie Sie einen lokalen Serverprozess mit der Klassen-ID "10000013-0000-0000-0000-000000000001" für die Sitzung mit der Sitzungs-ID 3 aktivieren.

Zunächst ruft das Beispiel die CoInitialize-Funktion auf, um die COM-Bibliothek zu initialisieren. Anschließend ruft das Beispiel CreateBindCtx auf, um einen Zeiger auf eine Implementierung der IBindCtx-Schnittstelle abzurufen. Dieses Objekt speichert Informationen zu Monikerbindungsvorgängen. Der Zeiger ist erforderlich, um Methoden der IMoniker-Schnittstelle aufzurufen. Als Nächstes ruft das Beispiel die MkParseDisplayNameEx-Funktion auf, um den zusammengesetzten Sitzungsmoniker zu erstellen, und dann die IMoniker::BindToObject-Methode, um die Verbindung zwischen dem Client und dem Serverprozess mithilfe des neu erstellten Sitzungsmonikers zu aktivieren. An diesem Punkt können Sie den Schnittstellenzeiger verwenden, um die gewünschten Vorgänge für das Objekt auszuführen. Schließlich gibt das Beispiel den Bindungskontext frei und ruft die CoUninitialize-Funktion auf.

// Initialize COM.

HRESULT hr = CoInitialize(NULL);
if (FAILED(hr)) exit(0);  // Handle errors here.

// Get interface pBindCtx.

IBindCtx* pBindCtx;
hr = CreateBindCtx(NULL, &pBindCtx);
if (FAILED(hr)) exit(0);  // Handle errors here.

// Get moniker pMoniker.

OLECHAR string[] =
    L"Session:3!clsid:10000013-0000-0000-0000-000000000001";
ULONG ulParsed;
IMoniker* pMoniker;
hr = MkParseDisplayNameEx( pBindCtx,
                           string,
                           &ulParsed,
                           &pMoniker
                          );
if (FAILED(hr)) exit(0);  // Handle errors here.

// Get object factory pSessionTestFactory.

IUnknown* pSessionTestFactory;
hr = pMoniker->BindToObject( pBindCtx,
                             NULL,
                             IID_IUnknown,
                             (void**)&pSessionTestFactory
                            );
if (FAILED(hr)) exit(0);  // Handle errors here.

//
// Make, use, and destroy object here.
//
pSessionTestFactory->Release();
pSessionTestFactory = NULL;

pMoniker->Release();  // Release moniker.

pBindCtx->Release();  // Release interface.

CoUninitialize();  // Release COM.

Da "{klassen-ID des Klassenmonikers}" auch eine Möglichkeit zum Benennen eines Klassenmonikers ist, können Sie die folgende Zeichenfolge verwenden, um den zusammengesetzten Moniker (den mit dem Klassenmoniker zusammengesetzten Sitzungsmoniker) zu benennen, anstatt wie im vorherigen Beispiel gezeigt.

OLECHAR string[] = 
    L"Session:3!{0000031A-0000-0000-C000-000000000046}:
    10000013-0000-0000-0000-000000000001";

Hinweis

Wenn derselbe Benutzer während einer sitzungsübergreifenden Aktivierung bei jeder Sitzung angemeldet ist, können Sie jeden Serverprozess, der für die Ausführung im Aktivierungsmodus "Interaktiver Benutzer ausführen" konfiguriert ist, erfolgreich aktivieren. Wenn verschiedene Benutzer bei jeder Sitzung angemeldet sind, muss der Server die CoInitializeSecurity-Funktion aufrufen, um die entsprechenden Benutzerrechte festzulegen, bevor eine erfolgreiche Aktivierung und Verbindung zwischen dem Client und dem Server hergestellt werden kann. Eine Möglichkeit, dies zu erreichen, besteht darin, dass der Server eine benutzerdefinierte IAccessControl-Schnittstelle implementiert und die Implementierung an CoInitializeSecurity übergibt. In jedem Fall muss der Clientbenutzer über die entsprechenden Start- und Zugriffsberechtigungen verfügen, die von der anwendung angegeben werden, die auf dem Server ausgeführt wird. Weitere Informationen finden Sie unter Sicherheit in COM.

Weitere Informationen zu vom System bereitgestellten Monikern und Monikern und Aktivierungsmodi finden Sie unter Moniker, die IMoniker-Schnittstelle und AppId Key in der COM-Dokumentation im Platform Software Development Kit (SDK).