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

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Verwenden von COM Komponenten in ASP.NET

Geschrieben von: Christoph Wille
Kategorie: ASP.NET

Im heutigen Artikel beschäftige ich mich mit einem Thema, das sehr viele ASP.NET Umsteiger interessieren wird: wie kann ich meine gekauften oder selbst erstellten COM Komponenten in der ASP.NET Umgebung einsetzen.

Das grundsätzliche Problem besteht darin, daß ASP.NET in der Common Language Runtime fußt, die ein sogenanntes Managed Execution Environment ist. Der Code selbst heißt dann Managed Code, und die Runtime bezieht die Information zum Management des Codes aus der sogenannten Metadata, die vom Compiler zum Beschreiben des Sourcecodes mitgeneriert wurde.

Das Problem ist jetzt, daß existierende Komponenten natürlich keine Metadatainformationen besitzen. Also muß ich für meine Komponenten diese generieren - aber halt: wenn es ein Tool gibt, das Metadata erzeugen kann, woher nimmt es die Informationen für die Metadata? Diese kommen aus der Type Library, und normalerweise hat heute jede Komponente eine Type Library. Falls nicht, gibt es zwar einen (unschönen) Weg rundherum, allerdings würde ich da vorher noch einen Henkel an der Komponente anschweißen - zum Wegwerfen!

In diesem Artikel werde ich die Generierung der Metadata anhand anhand der SA-STMPmailFREE Komponente von Software Artisans demonstrieren. Wer den Beispielen folgen möchte, kann sie ohne weiteres downloaden - sie ist gratis. Der Downloadlink findet sich am Ende des Artikels.

Voraussetzung um den Sourcecode dieses Artikels verwenden zu können ist eine Installation des Microsoft .NET Framework SDK's auf einem Webserver. Weiters setze ich voraus, daß der Leser die Programmiersprache C# zu einem gewissen Grad beherrscht - es finden sich etliche Artikel auf diesem Server, um das notwendige Wissen zu erlernen.

Erzeugen der Metadata DLL

Der erste Schritt ist, die Metadata zu erzeugen. Dazu muß man zuerst in das Verzeichnis mit der entsprechenden Komponenten-DLL gehen:

In diesem Verzeichnis startet man dann ein Kommandoprompt, und tippt folgenden Befehl ein:

tlbimp sasmtp.dll /out:sasmtp_dotnetproxy.dll

Mit diesem einfachen Befehl wird die Metadatainformation in die Datei sasmtp_dotnetproxy.dll gespeichert (korrekt bezeichnet ist diese DLL eine Assembly). Diese ist jetzt unser Proxy zum eigentlichen "unmanaged" COM Objekt. Hier die Ausgabe für die Generierung des Proxies für SA-SMTPmail:

Installation für ASP.NET

Für ASP.NET gibt es einige Wege, die Metadata-DLL zu installieren:

  • In das bin Verzeichnis der Applikation
  • In das Verzeichnis der ASP.NET Datei

Die Methode mit dem Speichern neben der ASP.NET Datei hat einen Haken: man muß ein @Assembly Statement in jede ASP.NET Seite einbauen, die die Komponente verwenden soll. Bei der Speicherung in das bin Verzeichnis erspart man sich das - die Assembly wird für alle ASP.NET Seiten der Applikation geladen.

Daher habe ich natürlich die Assembly in das bin Verzeichnis verfrachtet:

Der IL Disassembler

Jetzt kommen wir zu etwas, das viele VB oder VBScript Programmierer auf den ersten Blick etwas abschrecken wird - wir müssen einen Disassembler bemühen, um an einige wichtige Informationen zu kommen:

  • Der Namespace der Assembly (für das @Import Statement)
  • Die exakten Namen der Klassen (diese können sehr wohl von dem unterschiedlich sein, die man in ASP verwendet hat!)
  • Die Datentypen der Methoden und Eigenschaften
  • Die exakte Schreibweise der Methoden und Eigenschaften - in C# macht es einen Unterschied, ob man BodyText oder Bodytext schreibt.

Den IL (Intermediate Language) Disassembler startet man durch eintippen von ildasm.exe in der Run Dialogbox des Startmenüs. Mit dem Open Befehl (File Menü) wählt man die entsprechende DLL aus, und in unserem Fall bekommt man folgendes Bild:

Markiert habe ich den Namespace: sasmtp_dotnetproxy. Diesen brauchen wir für das @Import Statement in unseren ASP.NET Seiten. Weiters sind hier einige nette Symbole versteckt - als Tip: wichtig ist für den ASP.NET Programmierer nur das vollständig blaue Symbol - das sind Klassen. Die, die uns interessiert ist CoSMTPMailClass. Das ist das Äquivalent für die ProgId SoftArtisans.SMTPMail. Wie schon angekündigt, es kann Unterschiede in den Namen geben!

Wenn man diese Klasse jetzt expandiert, erhält man eine Liste von Eigenschaften und Methoden:

Wie man sieht, haben alle Methoden sehr eindeutige Datentypzuweisungen: zuerst kommt der Methodenname, gefolgt nach einem Doppelpunkt vom Rückgabewert, und dann in Klammern von den Parametern der Methode.

Ungewohnt für VBScript Programmierer wird es bei den Eigenschaften, weil diese durch get_ und set_ Methoden repräsentiert sind:

Allerdings gibt es dann am Ende eine Auflistung nach Eigenschaftsnamen (rotes Dreieck). Wenn man auf eine Eigenschaft doppelklickt, bekommt man die Definition der Eigenschaft präsentiert. Achtung: Eigenschaften können Get, Set oder Get/Set sein.

Nehmen Sie sich die Zeit, etwas mit dem IL Disassembler herumzuspielen - er wird Ihnen sicherlich noch das ein oder andere Mal sehr hilfreich sein!

Verwendung der Komponente in ASP.NET

Da wir jetzt bestens über die Metadata informiert sind, bleibt uns nur noch die Komponente in ASP.NET auch tatsächlich zu verwenden. Das folgende Beispiel (sasmtpmail.aspx) beweist, daß wenn man alle Voraussetzungen erfüllt hat, die Programmierung nicht mehr wirklich schwierig ist:

<% @Page Language="C#" %>
<% @Import Namespace="sasmtp_dotnetproxy" %>
<%
// Tested with SMTPMail(tm) 2.0.0.1
CoSMTPMailClass email = new CoSMTPMailClass();

String strVersion = email.Version;
Response.Write(strVersion);

email.BodyText = "Das ist die Message, \r\ndie abgeschickt wird";
email.ConfirmRead = false;
email.ReturnReceipt = false;
email.FromName = "Christoph Wille";
email.FromAddress = "christophw@alphasierrapapa.com";
email.SMTPLog = Server.MapPath("log.txt");

bool bDone = email.AddRecipient("Chris","christophw@fx2.Dev.AlfaSierraPapa.Com");

email.RemoteHost = "fx2.dev.alfasierrapapa.com";
bool bResult = email.SendMail();

if (bResult)
{
  Response.Write("<br>Mail sent!");
}
else
{
  Response.Write("<br>Error sending mail: ");
  Response.Write(email.Response); 
}
%>

Zuerst wird der Namespace sasmtp_dotnetproxy importiert, gefolgt von der Erzeugung einer Instanz der Klasse CoSMTPMailClass. In ASP hätten wir die Komponente mit diesem Statement erzeugt:

Set xObj = CreateObject("Softartisans.SMTPMail")

Der restliche Sourcecode differiert eigentlich nicht mehr (bis auf C# vs VBScript) von einer normalen ASP Seite, auf der SA-SMTPmail verwendet wird.

Schlußbemerkung

Einen Vorteil der Methode der Erzeugung der Metadata habe ich bis zum Schluß aufgehoben: wir arbeiten mit einem Objekt, das im Vergleich zu ASP Early-Bound ist, ergo um vieles schneller angesprochen werden kann. Damit hat sich ja die zusätzliche Arbeit sogar noch so richtig ausgezahlt.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

.NET Komponenten in COM+ Clients einsetzen
Dateityp-Ermittlung in Managed C++
Eine Eurokonvertierungskomponente in C# erstellen
Index Server Abfragen per Web Service
Transaktionen in C# Business Tier Komponenten

Links zu anderen Sites

Die aspDEdotnet Diskussionsliste
SA-SMTPmail

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©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.