Contextactivering
In COM+wordt elk COM-object gemaakt met een bijbehorende context. Dit betekent dat er een nieuwe context moet worden gemaakt en geïnitialiseerd of dat er een geschikte bestaande context wordt gebruikt. Dit proces wordt activeringgenoemd. In COM+wordt een object geactiveerd in een eigen context of in die van de maker (een object dat heeft gevraagd om het object te activeren, bijvoorbeeld door CoCreateInstance aan te roepen).
In sommige omstandigheden, zoals bij objectpooling, wordt een object geactiveerd zonder helemaal opnieuw te worden gemaakt. In dit geval wordt een actief exemplaar geactiveerd binnen een context. Gedurende de levensduur kan deze herhaaldelijk in verschillende contexten worden geactiveerd.
Het basismechanisme is in beide gevallen hetzelfde: een object is gekoppeld aan een context en die context wordt correct geïnitialiseerd om de uitvoeringsbehoeften van het object weer te geven.
Stromen van contexteigenschappen
Wanneer een object wordt geactiveerd als reactie op een aanvraag voor het maken van een ander object, moet COM+ tussen het object mediaatiëren om het downstreamobject correct te activeren. COM+ moet de context van de aanroeper vergelijken met de configuratie van het aangeroepen onderdeel en vervolgens bepalen waar het downstreamonderdeel moet worden geactiveerd en hoe de contexteigenschappen moeten worden geïnitialiseerd.
Om de configuratie van het onderdeel te detecteren, zoekt COM+ deze op in de COM+-klasseregistratiedatabase, die is geoptimaliseerd voor extreem snelle zoekacties in runtime. (Dit wordt bepaald door hoe u een onderdeel hebt geconfigureerd bij het installeren in een COM+-toepassing.) De configuratie van het onderdeel wordt vervolgens onderzocht op basis van de status van de contexteigenschappen van de aanroeper.
In sommige gevallen is de configuratie consistent met de context van de aanroeper en kan het onderdeel worden geactiveerd binnen de context van de beller. Dit kan alleen gebeuren als de context van de aanroeper voldoet aan alle runtimevereisten van het nieuwe object.
Wanneer het downstreamonderdeel niet kan worden geactiveerd binnen de context van de beller, wordt het geactiveerd in een eigen context in een geschikt appartement. Wanneer dit gebeurt, kunnen bepaalde contexteigenschappen van de aanroeper naar de aanroep stromen. Als de beller bijvoorbeeld is gekoppeld aan een transactie en de aanroep transacties ondersteunt, krijgt het nieuwe object een eigen context (om in de transactie te stemmen, moet deze een eigen consistente vlag hebben) en neemt de transactie-id en activiteits-id van de beller over (die zich binnen hetzelfde transactie- en synchronisatiedomein bevinden).
Genegeerde contexteigenschappen
Afhankelijk van hoe een onderdeel is geconfigureerd, spelen sommige contexteigenschappen mogelijk geen rol bij het bepalen of het is geactiveerd in de context van de maker of een eigen context. Zo spelen de instellingen Voor uitgeschakelde transacties en synchronisatie uitgeschakeld, die de aanwezigheid van een transactie of een synchronisatiedomein aangeven, geen enkele rol in de activering van het onderdeel. Deze eigenschappen worden fundamenteel genegeerd wanneer de context wordt gestroomd. Of als een onderdeel alleen toegangscontrole op procesniveau gebruikt, wordt de eigenschap beveiligingscontext genegeerd. De beveiligingsconfiguratie van het onderdeel speelt nooit een rol bij de activering ervan.
Activering afdwingen in de context van de beller
In sommige gevallen wilt u misschien dat een object alleen in de context van de aanroeper wordt geactiveerd, dat wil zeggen, dat wil zeggen, nooit geactiveerd in een eigen context. U kunt bijvoorbeeld het gedrag van het object bepalen wanneer het wordt aangeroepen binnen een contextgrens.
U kunt ervoor zorgen dat een object niet kan worden geactiveerd in een eigen context door de moet worden geactiveerd in de context van bellers optie op het tabblad Activering van het onderdeel Eigenschappen pagina te selecteren, met behulp van het beheerhulpprogramma Component Services. (Zie Activering afdwingen in de context van de beller voor stapsgewijze instructies.) Wanneer u deze optie selecteert en het object niet kan worden geactiveerd in de context van de aanroeper, mislukt CoCreateInstance- CO_E_ATTEMPT_TO_CREATE_OUTSIDE_CLIENT_CONTEXT.
Standaardcontext
Er bestaan standaardcontexten ter ondersteuning van niet-geconfigureerde onderdelen: COM-onderdelen die niet zijn geïnstalleerd in COM+-toepassingen en niet zijn geregistreerd in de COM+-klasseregistratiedatabase. Als niet-geconfigureerde onderdelen een compatibel threadingmodel hebben, worden ze geactiveerd in de context van de aanroeper. Anders worden ze geactiveerd in een standaardcontext in het juiste appartement. Elk appartement heeft een standaardcontext ter ondersteuning van COM-objecten die geen COM+-services gebruiken.
Activering van hooking
Door IObjectControl::Activate and IObjectControl::D eactivatete implementeren, kunt u activering en deactivering aan elkaar koppelen om speciale initialisatie uit te voeren in de nieuwe context. Deze methoden worden op bepaalde punten in de levenscyclus van een object door COM+ aangeroepen wanneer het object is geconfigureerd voor het gebruik van JIT-activering of objectpooling. Zie COM+ Just-In-Time-activering en COM+ Object Pooling voor meer informatie.
Verwante onderwerpen