Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Poolbare objecten moeten aan bepaalde vereisten voldoen, zodat een enkel objectexemplaar door meerdere klanten kan worden gebruikt.
Staatloos
Om beveiliging, consistentie en isolatie te behouden, mogen poolbare objecten geen clientspecifieke status van client naar client hebben. U kunt elke status per client beheren met behulp van IObjectControl-, het uitvoeren van contextspecifieke initialisatie met IObjectControl::Activeer en schoon elke clientstatus op met IObjectControl::D eactivate. Zie Objectlevensduur en -status beherenvoor meer informatie.
Geen thread-affiniteit
Poolbare objecten kunnen niet worden gebonden aan een bepaalde thread; anders kunnen de prestaties mogelijk rampzalig zijn. Daarom kunnen poolbare objecten niet worden gemarkeerd om te worden uitgevoerd in het appartementsmodel; ze moeten worden uitgevoerd in het multithreaded appartement of het neutrale appartement. Daarnaast mogen poolbare objecten geen lokale threadopslag gebruiken en mogen ze de free-threaded marshaler niet aggregeren. Zie COM+ Threading Modelsvoor meer informatie over threading in COM+.
Notitie
De Microsoft Visual Basic 6.0- en eerdere ontwikkelomgevingen kunnen alleen onderdelen van het appartementsmodel maken. In Visual Basic .NET kunnen onderdelen echter worden gegroepeerd.
Agregeerbaar
Poolbare objecten moeten aggregatie ondersteunen, dat wil zeggen, ze moeten worden gemaakt door CoCreateInstance aan te roepen met een niet-NULL pUnkOuter argument. Wanneer COM+ een gegroepeerd object activeert, wordt er een aggregatie gemaakt om de levensduur van het gegroepeerde object te beheren en methoden aan te roepen op IObjectControl-. Zie Aggregationvoor meer informatie over het schrijven van samenvoegbare objecten.
Transactionele onderdelen
Poolbare objecten die deelnemen aan transacties, moeten beheerde resources handmatig aanmelden. Wanneer het gepoold is, is het niet mogelijk voor de resourcebeheerder om automatisch deel te nemen aan een transactie als uw object een beheerde bron bevat, zoals een databaseverbinding, op het moment dat het object in een bepaalde context wordt geactiveerd. Daarom moet het object zelf de logica verwerken van het opsporen van de transactie, het uitschakelen van de automatische aanmelding van de resourcemanager en het handmatig aanmelden van resources die het bevat. Bovendien moet een transactioneel gegroepeerd object de huidige status van de resources weergeven in de parameterwaarden van IObjectControl::CanBePooled. Zie Transactionele objecten groeperenvoor meer informatie.
IObjectControl implementeren om de levensduur van het object te beheren
Poolbare objecten moeten IObjectControl-implementeren, hoewel dit niet strikt noodzakelijk is. Transactionele onderdelen die zijn gegroepeerd, moeten echter IObjectControl-implementeren. Deze onderdelen moeten de status controleren van de resources die ze bewaren en aangeven wanneer ze niet opnieuw kunnen worden gebruikt; wanneer IObjectControl::CanBePooled onwaar retourneert, wordt een transactie verdoemd. Zie Objectlevensduur en -status beherenvoor meer informatie.
Taalbeperkingen
Onderdelen die met behulp van Microsoft Visual Basic 6.0 en eerder zijn ontwikkeld, kunnen niet worden gepoold omdat deze onderdelen gethread worden volgens een appartementsmodel. In Visual Basic .NET kunnen onderdelen echter worden gegroepeerd.
Verouderde onderdelen
Zolang ze niet-transactioneel zijn en voldoen aan de juiste voorgaande vereisten, kunnen onderdelen worden gegroepeerd, zelfs als ze niet specifiek zijn geschreven met poolfunctionaliteit in gedachten. Het is niet nodig om IObjectControl-te implementeren; een onderdeel dat dit niet doet, neemt niet deel aan het beheer van de levensduur. Als IObjectControl::CanBePooled niet is geïmplementeerd, wordt het object opnieuw gebruikt totdat de pool de maximale grootte bereikt.
Verwante onderwerpen