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 in genau einem COM-Apartment. Mehrere Objekte können im selben Kontext ausgeführt werden, und mehrere Kontexte können sich in demselben Apartment befinden. Wenn ein Objekt aktiviert wird, stellen Kontexteigenschaften, z. B. Sicherheitskontexteigenschaften, die Laufzeitanforderungen eines Objekts dar.

Hinweis

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. Diese Eigenschaften enthalten einen Zustand, der bestimmt, wie die Ausführungsumgebung Dienste für Objekte innerhalb des Kontexts ausführt. In einigen Fällen können Sie direkt mit den Kontexteigenschaften eines Objekts interagieren, um einen zustand anzugeben, der für einen Dienst relevant ist, der für das Objekt bereitgestellt wird. Dies würden Sie beispielsweise tun, wenn ein Objekt, das an einer automatischen Transaktion teilnimmt, über das Ergebnis der Transaktion abstimmt.

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

Programmgesteuerte Interaktion mit Kontexteigenschaften

Jeder Kontext verfügt über ein zugeordnetes ObjectContext-Objekt , das seine Eigenschaften nachverfolgt. Sie können auf ObjectContext zugreifen, indem Sie die GetObjectContext-Funktion aufrufen. Nachdem Sie auf ObjectContext zugegriffen haben, können Sie Methoden auf der IObjectContext-Schnittstelle aufrufen, die sie verfügbar macht, um Kontexteigenschaften zu bearbeiten.

Das Aufrufen von IObjectContext::SetComplete hat beispielsweise zur Folge, dass das Transaktionskonsistenzbit auf "konsistent" und das JIT-Aktivierungsbit auf "done" für den kontext festgelegt wird, der dem Objekt zugeordnet ist. "Konsistent" signalisiert COM+, dass Sie für einen Commit für die Transaktion stimmen, und "fertig" gibt an, dass Ihr Objekt bereit ist, deaktiviert zu werden, wenn die Methode zurückgibt.

Neben IObjectContext sind weitere spezialisierte Schnittstellen, die Zugriff auf Kontexteigenschaften bieten, IObjectContextInfo, IContextState und IObjectContextActivity. Bis zu einem gewissen Grad 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 den Kontext nur insoweit berücksichtigen, als 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 möglicherweise die folgenden beiden miteinander verbundenen Facetten von Kontexten genauer berücksichtigen:

  • Die Aktivierung des Kontexts oder die Initialisierung eines Objekts in einem entsprechenden Kontext.
  • Abhören oder das, was COM+ bei Aufrufen über eine Kontextgrenze hinweg ausführt.

Beziehung zu MTS-Kontext-Wrappern

Kontexte ersetzen effektiv die MTS-Kontext wrapper. Der Zweck, den sie erfüllt haben – die Bereitstellung automatischer Dienste durch Das 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, der außerhalb des Kontext wrappers übergeben werden kann. In COM+ ist dies nicht erforderlich. Normale Objektverweise (diese Zeiger) funktionieren.