Freigeben über


COM+ Kontexte

Für konfigurierte Komponenten, die in COM+-Anwendungen ausgeführt werden, sind Kontexte die Grundlage, auf der COM+-Dienste bereitgestellt werden. In COM+ wird ein Kontext als Satz von Laufzeiteigenschaften definiert, die einem oder mehreren COM-Objekten zugeordnet sind, die zum Bereitstellen von Diensten für diese Objekte verwendet werden.

In COM+ ist jedes COM-Objekt genau einem Kontext zugeordnet, während es ausgeführt wird (d. h. zwischen seiner Aktivierung und Deaktivierung), und jeder Kontext befindet sich innerhalb genau einer COM-Wohnung. Mehrere Objekte können innerhalb desselben Kontexts ausgeführt werden, und mehrere Kontexte können sich innerhalb derselben Wohnung befinden. Initialisiert, wenn ein Objekt aktiviert wird, stellen Kontexteigenschaften wie Sicherheitskontexteigenschaften die Laufzeitanforderungen eines Objekts dar.

Anmerkung

Bei nicht konfigurierten Komponenten, die keine COM+-Dienste verwenden, wird der Kontext größtenteils ignoriert.

 

COM+ verwendet Kontexteigenschaften als Grundlage für die Bereitstellung von Laufzeitdiensten. Dieser Eigenschaften-Haltezustand, der bestimmt, wie die Ausführungsumgebung Dienste für Objekte im Kontext ausführt. In einigen Fällen können Sie direkt mit den Kontexteigenschaften eines Objekts interagieren, um einen für einen Dienst relevanten Zustand anzugeben, der für das Objekt bereitgestellt wird. Dies wäre beispielsweise der Fall, wenn ein Objekt, das an einer automatischen Transaktion teilnimmt, über das Ergebnis der Transaktion abgestimmt wird.

Eine ausführliche Erläuterung der COM-Grundlagen dieser Konzepte finden Sie unter Prozesse, Threads und Apartments.

Programmgesteuerte Interaktion mit Kontexteigenschaften

Jeder Kontext verfügt über ein zugeordnetes ObjectContext- Objekt, das die Eigenschaften nachverfolgt. Sie können auf ObjectContext- zugreifen, indem Sie die GetObjectContext--Funktion aufrufen. Nachdem Sie auf ObjectContext-zugegriffen haben, können Sie Methoden für die IObjectContext Schnittstelle aufrufen, die zum Bearbeiten von Kontexteigenschaften verfügbar gemacht wird.

Beispielsweise hat das Aufrufen von IObjectContext::SetComplete die Auswirkung, die Transaktionskonsistenzbit auf "konsistent" festzulegen, und die JIT-Aktivierung Bit bis "fertig" für den Kontext, der dem Objekt zugeordnet ist. "Konsistente" Signale an COM+ , dass Sie für die Transaktion stimmen, und "fertig" gibt an, dass Ihr Objekt bereit ist, deaktiviert zu werden, wenn die Methode zurückgegeben wird.

Neben IObjectContext-sind andere spezialisierte Schnittstellen, die Zugriff auf Kontexteigenschaften bieten, IObjectContextInfo, IContextState-und IObjectContextActivity. In gewissem Maße greift ISecurityCallContext auch auf Kontexteigenschaften zu. Sie können IGetSecurityCallContext::GetSecurityCallContext verwenden, um ISecurityCallContext-abzurufen.

Grundlegendes zu Aktivierung und Abfangen

Im Allgemeinen müssen Sie sich nur über den Kontext gedanken machen, soweit er eine Reihe von Eigenschaften darstellt, von denen Sie einige festlegen oder abrufen können, die zum Bereitstellen von COM+-Diensten für Ihre Komponenten verwendet werden. Unter bestimmten Umständen müssen Sie jedoch die folgenden beiden miteinander verbundenen Facetten von Kontexten genauer betrachten:

  • Kontextaktivierungoder die Initialisierung eines Objekts in einem geeigneten Kontext.
  • interceptionoder was COM+ für Anrufe über eine Kontextgrenze ausführt.

Beziehung zu MTS-Kontextwrappern

Kontexte ersetzen effektiv die MTS-Kontextwrapper. Der Zweck, den sie bereitgestellt haben – die Bereitstellung von automatischen Diensten durch Abfangen von Erstellungsanforderungen – ist jetzt ein integriertes Feature von COM+. Daher müssen Sie die SafeRef--Funktion nicht mehr verwenden. In MTS wurde SafeRef verwendet, um einen Verweis auf Ihr Objekt abzurufen, das außerhalb des Kontextwrappers übergeben werden kann. In COM+ ist dies unnötig; normale Objektverweise (diese Zeiger) funktionieren.