Compartir a través de


Compatibilidad de componentes COM

Actualización: noviembre 2007

La mayoría de los componentes COM funcionará con ASP.NET. Al igual que con versiones anteriores de ASP (Páginas Active Server), puede seguir haciendo llamadas de enlace tardío a los componentes utilizando CreateObject (Función, Visual Basic). Para obtener más información, vea Interoperabilidad COM en aplicaciones .NET Framework.

Este tema contiene las siguientes secciones:

  • Enlace temprano

  • Componentes de 64 bits

Enlace temprano

Aunque todavía se admiten enlaces en tiempo de ejecución a los componentes, el enlace en tiempo de diseño es la mejor elección por motivos de rendimiento. Una herramienta denominada Importador de la biblioteca de tipos (TlbImp.exe), que se incluye con .NET Framework SDK, convierte los componentes COM estándar de archivos .dll en ensamblados de .NET Framework equivalentes mediante la generación de contenedores administrados en torno a los componentes. Los componentes convertidos pueden enlazarse tempranamente al código administrado para aumentar considerablemente el rendimiento. Para obtener más información sobre Tlbimp.exe, vea Exponer componentes COM en .NET Framework. Para obtener información sobre cómo convertir componentes COM en código administrado, vea Generar componentes COM para la interoperación.

Después de que se haya convertido el componente COM en un ensamblado de NET Framework, se puede importar a una página ASP.NET si se coloca una directiva al principio de la página. Por ejemplo, la siguiente directiva importa el espacio de nombres MyNewNamespace, creado con Tlbimp.exe:

<%@Import Namespace="MyNewNamespace"%>

El archivo de ensamblado generado por Tlbimp.exe se debe colocar en el directorio Bin de la aplicación ASP.NET. El archivo del componente COM original se debe registrar para el directorio en el que reside.

Al utilizar componentes COM STA, como los desarrollados con Visual Basic, desde una página ASP.NET, se debe incluir el atributo de compatibilidad AspCompat=true en una etiqueta <%@ Page > en la página ASP.NET, como se muestra en el ejemplo de código siguiente.

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

El atributo AspCompat obliga a que la página se ejecute en modo STA. El motor en tiempo de ejecución produce una excepción si se omite la etiqueta de compatibilidad y se hace referencia en la página a un componente STA. Si se convierte el componente STA a un ensamblado mediante Tlbimp.exe, el motor en tiempo de ejecución no detecta que el componente utiliza el modelo STA y no produce ninguna excepción, pero la aplicación puede mostrar un rendimiento deficiente.

Nota importante:

Los componentes COM creados durante la construcción se ejecutan antes de que se programe la solicitud en el grupo de subprocesos STA y, por tanto, se ejecutan en un subproceso de apartamento multiproceso (MTA). Esto produce un impacto muy negativo en el rendimiento, por lo que debería evitarse. Si se usa el modo AspCompat con componentes STA, los componentes COM sólo se deberían crear desde el evento Page_Load o posteriormente en la cadena de ejecución y no en el momento de construcción de la página.

Por ejemplo, la siguiente declaración de miembros crea el componente en el momento de la construcción.

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

En su lugar, use código como el siguiente.

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

Componentes de 64 bits

En una versión de 64 bits de Microsoft Windows, se pueden ejecutar aplicaciones de 32 bits utilizando el emulador WOW64. Sin embargo, los procesos sólo pueden ser de 32 bits o de 64 bits. No se puede tener un proceso que ejecute ambos.

Servicios de Internet Information Server (IIS) se ejecuta como una aplicación de 64 bits en versiones de Windows de 64 bits. El tipo de proceso de un componente COM debe coincidir con el tipo de proceso de trabajo de IIS. Se pueden ejecutar componentes de 32 bits en la versión de 64 bits de IIS utilizando una de las soluciones siguientes:

Se recomienda convertir los componentes en componentes de 64 bits. En el caso de componentes de Visual Basic, esto no es posible porque no hay ninguna versión de 64 bits del compilador de Visual Basic.

Vea también

Tareas

Cómo: Actualizar permisos de los componentes MTS existentes en ASP.NET

Conceptos

Exponer componentes COM en .NET Framework

Generar componentes COM para la interoperación

Carpetas de código compartido en sitios Web ASP.NET