Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

In VB Komponenten auf ASP Objekte zugreifen (Variante 2)

Geschrieben von: Christoph Wille
Kategorie: Komponenten

This printed page brought to you by AlphaSierraPapa

Wie im letzten Artikel versprochen, kommen wir heute nun zur zweiten Variante des Zugriffs auf die ASP-internen Objekte innerhalb von VB Komponenten - dem ObjectContext von COM+ (oder Microsoft Transaction Server [MTS], wenn Sie noch Windows NT 4.0 verwenden). Dieser wird jeder in COM+ Applikationen gehosteten Komponente übergeben, und wenn ASP die Applikation aufruft, enthält der ObjectContext die von uns gewünschten ASP-internen Objekte - und wir müssen nur noch darauf zugreifen.

Wir beschäftigen uns heute rein mit dem Aspekt des Zugriffs auf die ASP Objekte - die erweiterten Funktionen (Transaktionen, etc) von COM+ werde ich völlig außer Acht lassen. Dazu werden wir in einem weiteren Artikel mehr bringen, der dann auch die technischen Hintergründe von COM+ besser beleuchtet. Daher mögen einige Ausführungen auch extra-effizient erscheinen.

Die Komponente erstellen

Da wir bereits im letzten Artikel sehr ausführlich auf die Erstellung der Komponente eingegangen sind, machen wir dies heute im Eiltempo, und befassen uns hauptsächlich mit den Unterschieden.

Als erstes benötigen wir wieder ein ActiveX DLL Projekt. Dieses benennen wir AspHeuteTx, und die Klasse HelloWorldTx. Damit wir sowohl auf die COM+ Services (der ObjectContext kommt von dort) als auch die ASP Objekte zugreifen können, benötigen wir diesmal zwei Typbibliothekreferenzen - der folgende Screenshot zeigt die References Dialogbox:

Damit sind die Voraussetzungen geschaffen, und wir können unseren Code schreiben (Klassenmodul):

Option Explicit

Public Sub SayHelloTx()
    Dim objContext As ObjectContext
    Dim objResponse As ASPTypeLibrary.Response
    
    Set objContext = GetObjectContext()
    Set objResponse = objContext.Item("Response")
    
    objResponse.Write "Hello World!"
End Sub

Was passiert hier? Es gibt eine öffentliche Methode namens SayHelloTx, die zwei Variablen deklariert. Die eine ist für die Referenz auf den ObjectContext gedacht, die zweite auf die Referenz des Response Objekts, das wir aus dem ObjectContext erhalten. Es gibt keine spezielle Methode, die unser Objekt implementieren muß - beim ObjectContext greifen wir auf die Objekte zu, und niemand von außen übergibt sie an eine von uns implementierte Methode (wie bei OnStartPage im letzten Artikel).

Die Funktion GetObjectContext dient dazu, den ObjectContext zu erhalten (dies ist eine Hilfsfunktion, die COM+ zur Verfügung stellt). Da wir in ASP laufen (werden), gibt es ein Item namens Response - das nicht anderes als unser bekanntes Response Objekt ist - und dann auch als solches verwendet wird. Hinweis: wenn man diese Komponente außerhalb von ASP aufruft, wird man genau durch diesen Item Aufruf Fehlermeldungen bekommen.

Eine kleine COM+ bezogene Änderung müssen wir an unserem Projekt noch machen - der MTSTransactionMode soll auf No Transactions umgestellt werden (mehr dazu, und zu Transaktionen in späteren Artikeln). Der folgende Screenshot zeigt wo diese Einstellung gemacht werden muß.

Die Komponente registrieren

Wir haben unsere Komponente mit COM+ Services ausgestattet, also müssen wir unsere Komponente auch bei COM+ anmelden. Dies geschieht im Administrationsmodul Component Services, und ich zeige alle Schritte, die notwendig sind, um korrekt lauffähig zu werden. Der erste Schritt dazu ist eine neue COM+ Applikation zu erstellen.

Erstellen einer COM+ Applikation

Das Erstellen einer neuen COM+ Applikation geht wie folgt von statten:

  1. Starten von Administrative Tools/Component Services, expandieren des lokalen Computers.
  2. Mit der rechten Maustaste auf COM+ Applications klicken, und New/Application vom Contextmenü auswählen. Den ersten Schritt des Wizards überspringen.
  3. Aus dem Wizard Create an empty application auswählen.
  4. Weiter geht's mit dem Benennen der Applikation. Ebenfalls auswählen muß man ob es sich um eine Library oder Server Applikation handelt. Für unsere Zwecke ist eine Library Application ausreichend.
  5. Ein Klick auf Next und dann Finish erzeugt die Applikation für uns.

Nun kann man Komponenten in die Applikation einfügen.

Unsere Komponente installieren

Es gibt verschiedene Varianten um Komponenten in COM+ Applikationen zu registrieren, ich habe mich für den direktesten entschieden:

  1. Auf der neu erzeugten COM+ Applikation mit der rechten Maustaste klicken, und New/Component aus dem Kontextmenü auswählen. Auch in diesem Wizard kann der erste Schritt übersprungen werden.
  2. Unsere erste Entscheidung ist, wie und woher wir die Komponente installieren. Wir möchten eine neue Komponente installieren.
  3. In der sich öffnenden Dateiauswahldialogbox unsere kompilierte Komponente AspHeuteTx.dll auswählen. Nach der Auswahl erhält man folgendes Fenster mit Informationen über die Komponente:
  4. Mit Next & Finish wäre dann auch dieser Wizard erledigt.

Unsere fertig installierte COM+ Applikation mit Komponente (und expandierter Funktionalität) sieht nun wie folgt aus:

Und kann nun auch bereits schon verwendet werden.

Die Komponente verwenden

Die Verwendung selbst ändert sich durch den Einsatz einer COM+ Application nicht - die folgende kleine ASP Page (test.asp) beweist dies:

Set xObj = Server.CreateObject("AspHeuteTx.HelloWorldTx")
xObj.SayHelloTx

Alles funktioniert, wie es soll - nur schneller.

Schlußbemerkung

Zum letzten Absatz gilt noch hinzuzufügen, daß es noch schneller geht, wenn man sich weiter mit COM+ beschäftigt, vor allem mit Just In Time Activation und As Soon As Possible Deactivation. Aber das ist ein Thema eines weiteren Artikels.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010322.zip

Verwandte Artikel

Der Object Construct String
http:/www.aspheute.com/artikel/20020205.htm
In VB Komponenten auf ASP Objekte zugreifen (Variante 1)
http:/www.aspheute.com/artikel/20010320.htm
Klassenauflistungen mit dem Dictionary-Objekt
http:/www.aspheute.com/artikel/20020408.htm
Transaktionen in C# Business Tier Komponenten
http:/www.aspheute.com/artikel/20010619.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.