Freigeben über


COM-Komponentenkompatibilität

Aktualisiert: November 2007

Die meisten COM-Komponenten sind mit ASP.NET kompatibel. Wie auch bei den vorherigen Versionen von Active Server Pages (ASP) können Sie mit CreateObject-Funktion (Visual Basic) spät gebundene Aufrufe von Komponenten vornehmen. Weitere Informationen finden Sie unter COM-Interoperabilität in .NET Framework-Anwendungen.

Dieses Thema enthält folgende Abschnitte:

  • Frühe Bindung

  • 64-Bit-Komponenten

Frühe Bindung

Zwar wird das späte Binden an Komponenten weiterhin unterstützt, mit dem frühen Binden wird jedoch eine bessere Leistung erzielt. Das Tool Type Library Importer-Tool (Tlbimp.exe), das im Windows Software Development Kit (SDK) enthalten ist, konvertiert Standard-COM-Komponenten in DLL-Dateien in gleichwertige .NET Framework-Assemblys, indem es verwaltete Wrapper für die Komponenten erstellt. Wenn die konvertierten Komponenten früh an verwalteten Code gebunden werden, erhöht sich die Leistung erheblich. Weitere Informationen über Tlbimp.exe finden Sie unter Verfügbarmachen von COM-Komponenten für .NET Framework. Informationen über das Konvertieren von COM-Komponenten in verwalteten Code finden Sie unter Erstellen von COM-Komponenten für die Interoperabilität.

Nachdem die COM-Komponente in eine .NET Framework-Assembly konvertiert wurde, können Sie diese durch Einfügen einer Direktive am Seitenanfang in eine ASP.NET-Seite importieren. Beispielsweise importiert die folgende Direktive den Namespace MyNewNamespace, der von Tlbimp.exe erstellt wurde.

<%@Import Namespace="MyNewNamespace"%>

Die von der Datei Tlbimp.exe erstellte Assemblydatei muss im Verzeichnis Bin der ASP.NET-Anwendung abgelegt werden. Die ursprüngliche COM-Komponentendatei muss für das Verzeichnis, in dem sie sich befindet, registriert werden.

Bei der Verwendung von STA(Single-Threaded Apartment)-COM-Komponenten, d. h. von Komponenten, die mithilfe von Visual Basic entwickelt wurden, auf einer ASP.NET-Seite muss das Kompatibilitätsattribut AspCompat=true in einen <%@ Page >-Tag auf der ASP.NET-Seite eingefügt werden:

<%@Page AspCompat=true Language = VB%>

Das AspCompat -Attribut zwingt die Seite zur Ausführung im STA-Modus. Die Laufzeit löst eine Ausnahme aus, wenn das Kompatibilitätstag ausgelassen und auf der Seite auf eine STA-Komponente verwiesen wird. Wenn Sie die STA-Komponente mithilfe von Tlbimp.exe in eine Assembly konvertieren, wird von der Laufzeitumgebung nicht erkannt, dass die Komponente das STA-Modell verwendet, und es wird keine Ausnahme ausgelöst. Jedoch wird die Anwendung möglicherweise mit einer geringeren Leistung ausgeführt.

Wichtiger Hinweis:

Zur Konstruktionszeit erstellte COM-Komponenten werden ausgeführt, bevor die Anforderung im STA-Threadpool geplant wird, d. h., sie werden in einem MTA(Multithreaded Apartment)-Thread ausgeführt. Dies ist mit beträchtlichen Leistungseinbußen verbunden und daher zu vermeiden. Wenn Sie für STA-Komponenten den AspCompat-Modus verwenden, sollten Sie COM-Komponenten nur im Page_Load-Ereignis oder zu einem späteren Zeitpunkt in der Ausführungskette ausführen, jedoch nicht zur Konstruktionszeit der Seite.

Beispielsweise erstellt die folgende Memberdeklaration die Komponente zur Konstruktionszeit.

<%@ Page AspCompat="true" Language="C#" %>

<script >
    // The components is created at construction time.
    MyComObject comObj = new MyComObject();
    
    protected void Page_Load(object sender, EventArgs e)
    {
        // The object is first used here.
        comObj.DoSomething();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    
    </div>
    </form>
</body>
</html>
<%@ Page AspCompat="true" Language="VB" %>

<script >
    ' The components is created at construction time.
    Dim comObj As MyComObject = New MyComObject()
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        ' The object is first used here.
        comObj.DoSomething()
    End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    
    </div>
    </form>
</body>
</html>

Verwenden Sie stattdessen Code wie den folgenden:

<%@ Page AspCompat="true" Language="C#" %>

<script >
    protected void Page_Load(object sender, EventArgs e)
    {
        // The component is created and used after the code is running 
        // on the STA thread pool.
        MyComObject comObj = new MyComObject();
        comObj.DoSomething();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    
    </div>
    </form>
</body>
</html>
<%@ Page AspCompat="true" Language="VB" %>

<script >
    ' The component is created and used after the code is running 
    ' on the STA thread pool.
    Dim comObj As MyComObject = New MyComObject()
    comObj.DoSomething()
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" >
    <div>
    
    </div>
    </form>
</body>
</html>

64-Bit-Komponenten

Unter einer 64-Bit-Version von Microsoft Windows können Sie 32-Bit-Anwendungen über den WOW64-Emulator ausführen. Bei den Prozessen müssen Sie sich zwischen 32-Bit und 64-Bit entscheiden. Ein Prozess kann nicht in beiden Modi gleichzeitig laufen.

Internetinformationsdienste (IIS) wird unter 64-Bit-Versionen von Windows als 64-Bit-Anwendung ausgeführt. Der Prozesstyp einer COM-Komponente muss zum IIS-Workerprozesstyp passen. Um 32-Bit-Komponenten unter einer 64-Bit-Version von IIS auszuführen, wählen Sie eine der folgenden Möglichkeiten:

Es wird empfohlen, die Komponenten in 64-Bit-Versionen zu konvertieren. Für Visual Basic-Komponenten ist dies nicht möglich, da es keine 64-Bit-Version des Visual Basic-Compilers gibt.

Siehe auch

Aufgaben

Gewusst wie: Aktualisieren von Berechtigungen für vorhandene MTS-Komponenten in ASP.NET

Konzepte

Verfügbarmachen von COM-Komponenten für .NET Framework

Erstellen von COM-Komponenten für die Interoperabilität

Ordner für freigegebenen Code in ASP.NET-Websites