Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Obiekty zarządzane przez pulę muszą spełniać określone wymagania, aby umożliwić korzystanie z pojedynczej instancji przez wielu klientów.
Bezpaństwowy
Aby zachować bezpieczeństwo, spójność i izolację, obiekty z możliwością puli nie powinny zawierać stanu specyficznego dla klienta od klienta do klienta. Stanem każdego klienta można zarządzać przy użyciu IObjectControl, wykonując inicjowanie specyficzne dla kontekstu za pomocą IObjectControl::Activate i czyszczenie stanu klienta za pomocą IObjectControl::Deactivate. Aby uzyskać więcej informacji, zobacz Kontrolowanie okresu istnienia obiektu i stanu.
Brak powiązania wątków
Nie można powiązać obiektów zarządzanych przez pulę z określonym wątkiem; w przeciwnym razie wydajność może być potencjalnie katastrofalna. Z tego powodu nie można oznaczyć obiektów z możliwością puli do uruchomienia w modelu mieszkania; muszą one działać w wielowątkowym mieszkaniu lub neutralnym mieszkaniu. Ponadto obiekty z możliwością puli nie powinny używać magazynu lokalnego wątku ani nie powinny agregować marshalera bez wątkowego. Aby uzyskać więcej informacji na temat wątkowania w modelu COM+, zobacz modele wątkowe COM+.
Notatka
Środowiska programistyczne Microsoft Visual Basic 6.0 i starsze mogą tworzyć tylko składniki modelu apartamentowego. Jednak w języku Visual Basic .NET składniki można połączyć w pulę.
Agregowalny
Obiekty z możliwością puli muszą obsługiwać agregację — czyli muszą obsługiwać tworzenie przez wywołanie CoCreateInstance z argumentem pUnkOuter o wartości innej niż NULL. Gdy COM+ aktywuje obiekt w puli, tworzy agregację, aby zarządzać cyklem życia obiektu w puli i wywoływać metody na IObjectControl. Aby uzyskać szczegółowe informacje na temat tworzenia obiektów możliwych do agregacji, zobacz Agregacja.
Składniki transakcyjne
Obiekty podlegające pulowaniu, które uczestniczą w transakcjach, muszą ręcznie rejestrować zarządzane zasoby. Podczas gdy jest wspólny zasób, jeśli Twój obiekt przechowuje zasób zarządzany, taki jak połączenie z bazą danych, nie będzie możliwości, aby menedżer zasobów automatycznie zarejestrował się w transakcji po aktywacji obiektu w danym kontekście. W związku z tym sam obiekt musi obsługiwać logikę wykrywania transakcji, wyłączając automatyczne rejestrowanie w menedżerze zasobów i ręcznie rejestrować wszystkie przechowywane zasoby. Ponadto obiekt w puli transakcyjnej powinien odzwierciedlać bieżący stan swoich zasobów w wartościach parametrów IObjectControl::CanBePooled. Aby uzyskać więcej informacji, zobacz Pooling Transactional Objects.
Implementowanie kontrolek IObjectControl w celu zarządzania okresem istnienia obiektu
Obiekty pulowane powinny implementować IObjectControl, chociaż nie jest to konieczne. Składniki transakcyjne, które są w puli, muszą implementować IObjectControl. Te składniki powinny monitorować stan przechowywanych zasobów i wskazywać, kiedy nie można ich ponownie użyć; gdy IObjectControl::CanBePooled zwraca wartość false, spowoduje to usunięcie transakcji. Aby uzyskać więcej informacji, zobacz Kontrolowanie okresu istnienia i stanu obiektu.
Ograniczenia języka
Nie można łączyć w puli składników utworzonych w Microsoft Visual Basic 6.0 i wcześniejszych wersjach, ponieważ są one oparte na modelu wątków apartamentowych. Jednak w języku Visual Basic .NET składniki można połączyć w pulę.
Komponenty dziedziczone
Tak długo, jak nie są transakcyjne i są zgodne z odpowiednimi wcześniejszymi wymaganiami, składniki mogą być poolowane, nawet jeśli nie zostały specjalnie napisane z myślą o możliwości poolowania. Nie jest konieczne zaimplementowanie IObjectControl; składnik, który tego nie robi, po prostu nie będzie uczestniczyć w zarządzaniu jego okresem istnienia. Jeśli IObjectControl::CanBePooled nie zostanie zaimplementowany, obiekt będzie nadal ponownie używany, dopóki pula nie osiągnie maksymalnego rozmiaru.
Tematy pokrewne