Kontextaktivering
I COM+ skapas varje COM-objekt med en associerad kontext. Det innebär att antingen måste en ny kontext skapas och initieras eller så används en lämplig befintlig kontext. Den här processen kallas aktivering. I COM+ aktiveras ett objekt antingen i sin egen kontext eller i dess skapare (ett objekt som har begärt att objektet ska aktiveras, till exempel genom att anropa CoCreateInstance).
I vissa fall, till exempel med objektpooler, aktiveras ett objekt utan att skapas från grunden. I det här fallet aktiveras en instans som körs i en kontext. Under dess livslängd kan den aktiveras upprepade gånger i olika kontexter.
Den grundläggande mekanismen är densamma i båda fallen – ett objekt är associerat med en kontext och den kontexten initieras korrekt för att representera objektets körningsbehov.
Flöde av kontextegenskaper
När ett objekt aktiveras som svar på en begäran om att skapa från ett annat objekt måste COM+ medla mellan dem för att aktivera det underordnade objektet korrekt. COM+ måste jämföra anroparens kontext med konfigurationen av den anropade komponenten och sedan bestämma var den underordnade komponenten ska aktiveras och hur kontextegenskaperna ska initieras.
För att identifiera komponentens konfiguration letar COM+ upp den i COM+-klassregistreringsdatabasen, som är optimerad för extremt snabba körningssökningar. (Detta bestäms av hur du konfigurerade en komponent när du installerade den i ett COM+-program.) Komponentens konfiguration granskas sedan mot tillståndet för anroparens kontextegenskaper.
I vissa fall är konfigurationen konsekvent med anroparens kontext och komponenten kan aktiveras i anroparens kontext. Detta kan bara inträffa om anroparens kontext uppfyller alla körningskrav för det nya objektet.
När den underordnade komponenten inte kan aktiveras i anroparens kontext aktiveras den i sin egen kontext i en lämplig lägenhet. När detta inträffar kan vissa kontextegenskaper flöda från anropare till anropare. Om anroparen till exempel är associerad med en transaktion och anroparen stöder transaktioner, får det nya objektet sin egen kontext (för att rösta i transaktionen måste det ha en egen konsekvent flagga) och ärver anroparens transaktions-ID och aktivitets-ID (som finns inom samma transaktions- och synkroniseringsdomän).
Ignorerade kontextegenskaper
Beroende på hur en komponent har konfigurerats kan vissa kontextegenskaper inte spela någon roll när det gäller att avgöra om den aktiveras i skaparens kontext eller i sin egen kontext. Till exempel spelar inställningarna Transaktioner inaktiverade och synkronisering inaktiverade, som anger förekomsten av en transaktion eller en synkroniseringsdomän, ingen roll alls i komponentens aktivering. Dessa egenskaper ignoreras i grunden när kontexten flödar. Eller om en komponent endast använder åtkomstkontroll på processnivå ignoreras dess säkerhetskontextegenskap – komponentens säkerhetskonfiguration spelar aldrig någon roll i aktiveringen.
Framtvinga aktivering i anroparens kontext
I vissa fall kanske du bara vill att ett objekt ska aktiveras i anroparens kontext– det vill säga aldrig aktiveras i sin egen kontext. Du kanske till exempel vill styra objektets beteende när det anropas över en kontextgräns.
Du kan se till att ett objekt inte kan aktiveras i sin egen kontext genom att välja alternativet Måste aktiveras i anroparkontexten på fliken Aktivering för komponenten Egenskaper med hjälp av administrationsverktyget för Komponenttjänster. (Se Framtvinga aktivering i anroparens kontext för stegvisa instruktioner.) Om objektet inte kan aktiveras i anroparens kontext när du väljer det här alternativet misslyckas CoCreateInstance- och returnerar CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT.
Standardkontext
Standardkontexter finns för att stödja okonfigurerade komponenter, dvs. COM-komponenter som inte är installerade i COM+-program och som inte är registrerade i COM+-klassregistreringsdatabasen. Om okonfigurerade komponenter har en kompatibel trådmodell aktiveras de i anroparens kontext. Annars aktiveras de i en standardkontext i lämplig lägenhet. Varje lägenhet har en standardkontext som stöder COM-objekt som inte använder COM+-tjänster.
Aktivering av hooking
Genom att implementera IObjectControl::Aktivera och IObjectControl::D aktiverakan du koppla aktivering och inaktivering tillsammans för att utföra särskild initiering i den nya kontexten. Dessa metoder anropas av COM+ vid vissa tidpunkter i ett objekts livscykel, när objektet är konfigurerat att använda JIT-aktivering eller objektpooler. Mer information finns i COM+ Just-in-Time Activation and COM+ Object Pooling .
Relaterade ämnen