Udostępnij za pośrednictwem


Aktywacja kontekstu

W modelu COM+każdy obiekt COM jest tworzony ze skojarzonym kontekstem. Oznacza to, że należy utworzyć i zainicjować nowy kontekst lub użyć odpowiedniego istniejącego kontekstu. Ten proces jest znany jako aktywacji. W modelu COM+obiekt jest aktywowany we własnym kontekście lub w jego twórcy (obiekt, który zażądał aktywowania obiektu — na przykład przez wywołanie CoCreateInstance).

W niektórych okolicznościach, takich jak buforowanie obiektów, obiekt jest aktywowany bez tworzenia od podstaw. W takim przypadku uruchomione wystąpienie jest aktywowane w kontekście. Przez cały okres istnienia może być wielokrotnie aktywowany w różnych kontekstach.

Podstawowy mechanizm jest taki sam w obu przypadkach — obiekt jest skojarzony z kontekstem, a kontekst jest prawidłowo inicjowany w celu reprezentowania potrzeb w czasie wykonywania obiektu.

Przepływ właściwości kontekstu

Gdy obiekt jest aktywowany w odpowiedzi na żądanie utworzenia z innego obiektu, com+ musi pośrednicować między nimi, aby prawidłowo aktywować obiekt podrzędny. Com+ musi porównać kontekst obiektu wywołującego z konfiguracją wywoływanego składnika, a następnie zdecydować, gdzie aktywować składnik podrzędny i jak zainicjować jego właściwości kontekstu.

Aby odnaleźć konfigurację składnika, com+ wyszukuje go w bazie danych rejestracji klas COM+, która jest zoptymalizowana pod kątem bardzo szybkich wyszukiwań w czasie wykonywania. (Jest to określane przez sposób konfigurowania składnika podczas instalowania go w aplikacji COM+). Konfiguracja składnika jest następnie badana pod kątem stanu właściwości kontekstu obiektu wywołującego.

W niektórych przypadkach konfiguracja jest spójna z kontekstem obiektu wywołującego, a składnik można aktywować w kontekście obiektu wywołującego. Może się tak zdarzyć tylko wtedy, gdy kontekst obiektu wywołującego spełnia wszystkie wymagania dotyczące czasu wykonywania nowego obiektu.

Gdy składnik podrzędny nie może być aktywowany w kontekście obiektu wywołującego, jest aktywowany we własnym kontekście w odpowiednim mieszkaniu. W takim przypadku niektóre właściwości kontekstu mogą przepływać z obiektu wywołującego do wywoływania. Jeśli na przykład obiekt wywołujący jest skojarzony z transakcją, a obiekt wywoływany obsługuje transakcje, nowy obiekt pobiera własny kontekst (aby głosować w transakcji, musi mieć własną spójną flagę) i dziedziczy identyfikator transakcji i działania obiektu wywołującego (który znajduje się w tej samej domenie transakcji i synchronizacji).

Zignorowane właściwości kontekstu

W zależności od sposobu konfigurowania składnika niektóre właściwości kontekstu mogą nie odgrywać żadnej roli w określaniu, czy jest on aktywowany w kontekście twórcy, czy jego własnym kontekście. Na przykład ustawienia Wyłączone transakcje i Wyłączono synchronizację, wskazujące obecność transakcji lub domeny synchronizacji, nie będą odgrywać żadnej roli w aktywacji składnika. Te właściwości są zasadniczo ignorowane podczas przepływu kontekstu. Lub jeśli składnik używa tylko sprawdzania dostępu na poziomie procesu, jego właściwość kontekstu zabezpieczeń jest ignorowana — konfiguracja zabezpieczeń składnika nigdy nie będzie odgrywać roli w aktywacji.

Wymuszanie aktywacji w kontekście obiektu wywołującego

W niektórych okolicznościach można chcieć uaktywnić obiekt tylko w kontekście obiektu wywołującego — to znaczy, że nigdy nie został aktywowany w jego kontekście. Na przykład możesz chcieć kontrolować zachowanie obiektu, gdy jest wywoływany przez granicę kontekstu.

Możesz upewnić się, że obiekt nie może zostać aktywowany w swoim własnym kontekście, wybierając Musi być aktywowany w kontekście wywołujących opcji na karcie aktywacji składnika strony właściwości za pomocą narzędzia administracyjnego usługi składników. (Zobacz Wymuszanie aktywacji w kontekstu wywołującego, aby uzyskać instrukcje krok po kroku). Po wybraniu tej opcji, jeśli nie można aktywować obiektu w kontekście obiektu wywołującego, CoCreateInstance zakończy się niepowodzeniem, zwracając CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT.

Kontekst domyślny

Domyślne konteksty istnieją do obsługi nieskonfigurowanych składników — czyli składników COM nie zainstalowanych w aplikacjach COM+ i niezarejestrowanych w bazie danych rejestracji klas COM+. Jeśli nieskonfigurowane składniki mają zgodny model wątków, są aktywowane w kontekście obiektu wywołującego. W przeciwnym razie są one aktywowane w kontekście domyślnym w odpowiednim mieszkaniu. Każdy apartament ma domyślny kontekst do obsługi obiektów COM, które nie korzystają z usług COM+.

Aktywacja przypinania

Implementując IObjectControl::Activate i IObjectControl::D eactivate, można podłączyć aktywację i dezaktywację, aby wykonać specjalną inicjację w nowym kontekście. Te metody są wywoływane przez com+ w niektórych punktach w cyklu życia obiektu, gdy obiekt jest skonfigurowany do korzystania z aktywacji JIT lub buforowania obiektów. Aby uzyskać więcej szczegółów, zobacz com+ just-in-time activation i COM+ Object Pooling.

przechwytywanie wywołań między kontekstami