Partager via


Compatibilité des composants COM

Mise à jour : novembre 2007

La plupart des composants COM fonctionnent avec ASP.NET. À l'instar des versions antérieures d'ASP (Active Server Pages), vous pouvez encore effectuer des appels à liaison tardive vers vos composants à l'aide de la CreateObject, fonction (Visual Basic). Pour plus d'informations, consultez Interopérabilité COM dans les applications .NET Framework.

Cette rubrique contient les sections suivantes :

  • Liaison anticipée

  • Composants 64 bits

Liaison anticipée

Même si une liaison tardive aux composants reste prise en charge, une liaison anticipée constitue un meilleur choix pour des raisons de performance. Un utilitaire, Type Library Importer (Tlbimp.exe), inclus dans le Kit de développement logiciel (SDK) Windows, convertit les composants COM standard des fichiers .dll en assemblys .NET Framework équivalents en créant des wrappers managés autour des composants. Les composants convertis peuvent faire l'objet d'une liaison anticipée vers du code managé afin d'optimiser les performances. Pour plus d'informations sur Tlbimp.exe, consultez Exposition de composants COM au .NET Framework. Pour plus d'informations sur la conversion de composants COM en code managé, consultez Génération de composants COM pour l'interopérabilité.

Dès que le composant COM a été converti en assembly du .NET Framework, vous pouvez l'importer dans une page ASP.NET en plaçant une directive en haut de la page. Par exemple, la directive suivante importe l'espace de noms MyNewNamespace, créé par Tlbimp.exe.

<%@Import Namespace="MyNewNamespace"%>

Le fichier d'assembly généré par Tlbimp.exe doit être placé dans le répertoire Bin de l'application ASP.NET. Le fichier composant COM d'origine doit être inscrit pour le répertoire dans lequel il réside.

Lors de l'utilisation de composants COM STA (Single-Threaded Apartment), tels que les composants développés à l'aide de Visual Basic, à partir d'une page ASP.NET, vous devez inclure l'attribut de compatibilité AspCompat=true dans une balise <%@ Page > de la page ASP.NET, comme l'illustre l'exemple de code suivant.

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

L'attribut AspCompat force la page à s'exécuter en mode STA. Le runtime lève une exception si la balise de compatibilité est omise et si un composant STA est référencé sur la page. Si vous convertissez le composant STA en assembly à l'aide de Tlbimp.exe, le runtime ne détecte pas que le composant utilise le modèle STA et ne lève pas d'exception. Cependant, votre application peut afficher des performances médiocres.

Remarque importante :

Les composants COM créés au moment de la construction s'exécutent avant qu'une demande soit planifiée sur le pool de threads STA et s'exécutent par conséquent sur un thread MTA (Multithreaded Apartment). Cela a un impact négatif important sur les performances et doit donc être évité. Si vous utilisez le mode AspCompat avec des composants STA, vous ne devez pas créer des composants COM au moment de la construction de la page mais uniquement à partir de l'événement Page_Load ou plus tard dans la chaîne d'exécution.

Par exemple, la déclaration de membre suivante crée le composant au moment de la construction.

<%@ 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>

Utilisez plutôt du code tel que :

<%@ 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>

Composants 64 bits

Sur une version 64 bits de Microsoft Windows, il est possible d'exécuter des applications 32 bits à l'aide de l'émulateur WOW64. Toutefois, les processus peuvent uniquement s'exécuter soit en 32 bits, soit en 64 bits. Vous ne pouvez pas avoir de processus qui s'exécute dans les deux versions.

Internet Information Services (IIS) s'exécute en tant qu'application 64 bits sur les versions 64 bits de Windows. Le type de processus d'un composant COM doit correspondre au type de processus de traitement IIS. Il est possible d'exécuter des composants 32 bits sur la version 64 bits d'IIS à l'aide d'une des solutions suivantes :

Il est recommandé de convertir vos composants en versions 64 bits. Dans le cas de composants Visual Basic, c'est impossible car il n'existe aucune version 64 bits du compilateur Visual Basic.

Voir aussi

Tâches

Comment : mettre à jour des autorisations pour les composants MTS existants dans ASP.NET

Concepts

Exposition de composants COM au .NET Framework

Génération de composants COM pour l'interopérabilité

Dossiers de code partagé dans des sites Web ASP.NET