Sdílet prostřednictvím


Technologiebeispiel für Objektpooling

Aktualisiert: November 2007

In diesem Beispiel wird die Verwendung von JIT-Aktivierung (Just-in-Time) und Objektpooling in einer .NET Framework-Umgebung veranschaulicht. Eine Serveranwendung enthält das einzelne, zusammengefasste Objekt, das eine einzelne Protokolldatei darstellt. Mehrere Clientanwendungen instanziieren die gepoolte Objektklasse und rufen diese auf, um zu veranschaulichen, dass bei aktivierter JIT-Aktivierung und einer maximalen Poolgröße von einem Objekt alle Clientaufrufe durch eine einzelne Objektinstanz weitergeleitet werden. Dies führt dazu, dass eine einzelne Protokolldatei erstellt wird, in der die COM+-Aktivität und mehrere Clientaufrufe dokumentiert werden.

Informationen zum Verwenden der Beispiele finden Sie in folgenden Themen:

So erstellen Sie das Beispiel mithilfe der Eingabeaufforderung

  1. Öffnen Sie das Eingabeaufforderungsfenster, und navigieren Sie zu einem der sprachspezifischen Unterverzeichnisse unter dem Verzeichnis Technologies\ComponentServices\ObjectPooling.

  2. Geben Sie je nach verwendeter Programmiersprache msbuild ObjectPoolingCS.sln oder msbuild ObjectPoolingVB.sln in der Befehlszeile ein.

So erstellen Sie das Beispiel mithilfe von Visual Studio

  1. Öffnen Sie Windows Explorer, und navigieren Sie im Verzeichnis ObjectPooling zu einem der sprachspezifischen Unterverzeichnisse.

  2. Doppelklicken Sie je nach verwendeter Programmiersprache auf das Symbol für ObjectPoolingCS.sln oder ObjectPoolingVB.sln, um die Datei in Visual Studio zu öffnen.

  3. Klicken Sie im Menü Erstellen auf Projektmappe erstellen. Die Assembly OPDemoSvr.dll und die Assembly OPDemo.exe werden im Standardverzeichnis \bin oder \bin\Debug erstellt.

So registrieren und installieren Sie die Assembly im GAC

  1. Navigieren Sie zu dem Verzeichnis, das die erstellte Assembly enthält.

  2. Geben Sie regsvcs OPDemoSvr.dll in der Befehlszeile ein, um die Assembly zu registrieren.

  3. Geben Sie gacutil –i OPDemoSvr.dll in der Befehlszeile ein, um die Assembly im GAC zu installieren.

So führen Sie das Beispiel aus

  1. Öffnen Sie ein Eingabeaufforderungsfenster oder Windows Explorer, und navigieren zu dem Verzeichnis, das die neue ausführbare Datei enthält.

  2. Öffnen Sie im Menü Alle Programme im Untermenü Verwaltung das Verwaltungstool Komponentendienste.

  3. Suchen Sie die OPDemoSvr COM+-Anwendung, indem Sie den Knoten Komponentendienste\Computer\Arbeitsplatz\COM+-Anwendungen im linken Bereich des COM+-Explorer erweitern.

  4. Erweitern Sie den Knoten OPDemoSvr\Komponenten, und suchen Sie die Komponente Microsoft.Samples.Technologies.ComponentServices.ObjectPooling.PooledLogFile. Klicken Sie mit der rechten Maustaste auf die Komponente PooledLogFile, und wählen Sie im Popupmenü Eigenschaften aus. Klicken Sie auf die Registerkarte Aktivierung: Objektpooling ist aktiviert.

    Hinweis:

    Die Komponente wird mit einer minimalen Poolgröße von 0 (null) und einer maximalen Poolgröße von 1 konfiguriert. Das bedeutet, dass höchstens ein einzelnes gepooltes Objekt jeweils vorhanden ist, und zwar unabhängig von der Anzahl der Objekte, die vom Clientcode instanziiert werden. Diese Attribute werden im Beispielcode explizit mithilfe des ObjectPoolingAttribute festgelegt. Der Timeoutwert von 60 Sekunden für die Erstellung ist ein Standardwert, der angewendet wird, weil im Beispielcode explizit kein anderer Wert angefordert wird.

  5. Achten Sie auf den Inhalt im Bearbeitungsfeld Objektkonstruktion. Dieses Feld enthält den Namen der datenträgerbasierten Protokolldatei, die von dem gepoolten Beispielobjekt erstellt wird. Der Standardwert ist OPSvrLogCS.txt oder OPSvrLogVB.txt. Sie können den Namen ändern oder dem Dateinamen Pfadinformationen hinzufügen (z. B. C:\OPSvrLogCS.txt). Wenn Sie dem Dateinamen keine Pfadinformationen hinzufügen, wird die Datei im aktuellen System32-Verzeichnis erstellt.

  6. Klicken Sie auf OK, um das Eigenschaftendialogfeld der Komponente OPDemoServer zu schließen.

  7. Starten Sie in Windows Explorer oder im Eingabeaufforderungsfenster drei Kopien von OPDemo.exe. Navigieren Sie beispielsweise im Eingabeaufforderungsfenster zum Verzeichnis C:\Dokumente und Einstellungen\Ihr Benutzername\Eigene Dateien\Samples\Technologies\ComponentServices\ObjectPooling\VB\ObjectPooling\bin, und geben Sie dreimal opdemo.exe ein.

  8. Klicken Sie in jeder Clientanwendung auf die Schaltfläche Schreiben starten. Im Clientfenster wird blinkendes Sternchen angezeigt, welches angibt, dass Einträge in die Protokolldatei geschrieben werden, die in der Zeichenfolge der Objektkonstruktion für die Komponente OPDemoServer angegeben wurde.

  9. Warten Sie ein paar Sekunden, wenn alle Clientanwendungen mit dem Schreiben begonnen haben. Klicken Sie dann in jeder Clientanwendung auf die Schaltfläche Schreiben beenden.

  10. Suchen Sie die Protokolldatei, und öffnen Sie sie in der Anwendung Notepad.exe oder einem anderem Text-Editor. Es sollte eine Reihe von Anweisungen angezeigt werden, die COM+-Aufrufe von IObjectControl angeben. In der Mitte dieser Aufrufe finden Sie geschriebene Meldungen aus den Clientanwendungen (erkennbar an der jeweiligen Prozess-ID), die veranschaulichen, dass COM+ über drei Objektverweise Aufrufe eines einzelnen instanziierten Objekts koordiniert hat. Weitere Informationen zur IObjectControl-Schnittstelle finden Sie in den Kommentaren im Beispielcode und im Platform SDK.

    Hinweis:

    Um die Protokolldatei umzubenennen oder zu löschen, müssen Sie alle Instanzen der Clientanwendung beenden und die OPDemoSvr-Anwendung im Verwaltungstool Komponentendienste schließen. Klicken Sie dazu im linken Bereich des Explorer mit der rechten Maustaste auf die COM+-Anwendung, und wählen Sie im Popupmenü Herunterfahren aus.

Anforderungen

Plattform: Windows 2000, Windows XP, Windows Server 2003

.NET Framework-Version: 2.0, 1.1, 1.0

Hinweise

In diesem Beispiel wird eine Zeichenfolge einer Objektkonstruktion verwendet, um den Namen der Protokolldatei und eventuell des voll qualifizierten Pfads anzugeben. JIT-Aktivierung (Just-in-Time) ist ein COM+-Dienst, mit dem Clients einen Objektverweis erstellen und beliebig lange behalten können, ohne dass dafür eine tatsächliche Objektinstanz vorhanden sein muss. COM+ führt eine JIT-Aktivierung eines Objekts für einen Consumer aus, wenn der Aufruf über den Objektverweis erfolgt. Im Zuge dieser Aktivierung wird möglicherweise eine neue Objektinstanz erstellt. Bei Verwendung mit COM+-Objektpooling wird dem Aufrufer möglicherweise ein Verweis auf ein gepooltes Objekt übergeben. COM+ deaktiviert ein Objekt auf Grundlage des doneness-Bit im Objektkontext. Bei .NET Serviced Components kann das AutoCompleteAttribute auf Klassenmethoden angewendet werden. Dadurch wird angegeben, dass das Objekt beim Beenden der Methode deaktiviert werden kann.

Die C#-Komponente, wie im Verwaltungstool Komponentendienste zu sehen, heißt OPDemoServerCS.PooledLogFile. Die Visual Basic-Version lautet OPDemoServerVB.PooledLogFile. Weitere Informationen zum Erstellen von binären Beispieldateien und zu Registrierungsschritten finden in den Kommentaren in den Quellcodedateien.

Hinweis:

Verwenden Sie das Global Assembly Cache-Tool (Gacutil.exe), um die OPDemoSvr.dll-Assembly im globalen Assemblycache zu installieren, bevor Sie das Beispiel ausführen. Gacutil.exe befindet sich im Verzeichnis SDK\<Versionsnummer>\Bin.

COM+-Objektpooling ist ein Dienst zum Verwalten eines Pools aktiver Objekte, die von einem Client verwendet werden können, der eine für Pooling konfigurierte Komponente anfordert. Der Pool kann entweder administrativ oder mithilfe des ObjectPoolingAttribute konfiguriert werden. Zu den Poolattributen zählen die minimale und die maximale Poolgröße sowie ein Timeoutwert für die Anforderung zur Objekterstellung.

Komponenten, die für die JIT-Aktivierung aktiviert sind, und Objektpooling können die Art und Weise ihrer Wiederverwendung durch Implementieren der IObjectControl-Schnittstelle steuern. COM+ ruft IObjectControl-Methoden nur auf, um Schlüsselereignisse während der Objektaktivierung/-deaktivierung anzugeben oder um festzulegen, ob das Objekt an den Objektpool zurückgegeben werden kann. In diesem Beispiel wird IObjectControl nur zur Veranschaulichung der von COM+ verwendeten Schnittstelle implementiert. Weitere Informationen zu JIT-Aktivierung und Objektpooling finden Sie in der Platform SDK-Dokumentation.

Siehe auch

Referenz

CanBePooled

Global Assembly Cache-Tool (Gacutil.exe)

ObjectPoolingAttribute

JustInTimeActivationAttribute

ServicedComponent

System.EnterpriseServices

Weitere Ressourcen

Just-in-Time Activation

Object Construction

Writing Serviced Components