Compartilhar via


Compatibilidade com Componentes COM.

A maioria dos componentes COM irão funcionar com o ASP.NET.sistema autônomo sistema autônomo versões anteriores do ativo servidor Pages (ASP), você poderá fazer chamadas de ligação tardia para sistema autônomo seus componentes usando CreateObject Função (Visual Basic). Para obter mais informações, consulte Interoperabilidade COM em aplicativos .NET Framework.

Este tópico contém as seções a seguir:

  • Vinculação Antecipada

  • Componentes de 64 bits

Vinculação Antecipada

Enquanto a vinculação tardia dos componentes for suportada, vinculação antecipada é uma escolha melhor por razões de performance.Uma ferramenta chamada Tipo Biblioteca Importer (Tlbimp.exe), incluída com Windows Software Development Kit (SDK), converte o padrão de componentes COM em arquivos .dll para assemblies equivalentes em .NET Framework através da construção de encapsuladores sobre os componentes.Os componentes convertidos podem ser vinculados antecipadamente para código gerenciado para aumentar significativamente a performance.Para mais informações sobre Tlbimp.exe, consulte Expondo componentes COM para o .NET Framework.Para mais informações sobre conversão de componentes COM para código gerenciado, consulte Criando componentes de COM para interoperação.

Depois que o componente COM for convertido em um assembly do .NET Framework, você pode importar ele para uma página do ASP.NET, colocando uma diretiva na parte superior da página.Por exemplo, a diretiva seguinte importa MyNewNamespace, que foi criado por Tlbimp.exe.

<%@Import Namespace="MyNewNamespace"%>

O arquivo assembly gerado por Tlbimp.exe deve ser colocado no diretório Bin do aplicativo ASP.NET.O arquivo componente COM original deve ser registrado para o diretório em que ele reside.

Quando usando componentes COM single-threaded apartment (STA), como componentes desenvolvidos usando Visual Basic, de uma página ASP.NET, você deve incluir o atributo de compatibilidade AspCompat=true em uma tag <%@ Page > na página ASP.NET, como mostrado no exemplo de código a seguir.

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

O atributo AspCompat força a página a executar no modo STA.O tempo de execução lança uma exceção se a marca de compatibilidade for omitida e um componente STA é referenciado na página.Se você converter o componente STA para um assembly usando o Tlbimp.exe, o tempo de execução não detecta que o componente usa o modelo STA e não não lança uma exceção, mas o seu aplicativo pode sofrer de desempenho deficiente.

Observação importante:

Componentes COM que são criados no momento da construção são executados antes que a solicitação seja agendada para o pool de segmentos do STA e consequentemente executam em uma thread em um apartamento multithreaded (MTA) .Isso tem um impacto significativo desempenho negativo e deve ser evitados.Se você utilizar AspCompat com componentes STA, você deverá criar componentes COM apes do evento Page_Load ou mais tarde na cadeia de execução e não em tempo de construção da página.

Por exemplo, a declaração de membro a seguir cria o componente no tempo de construção.

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

Em vez disso, use um código como o seguinte.

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

Em uma versão de 64 bits do Microsoft Windows, é possível executar aplicativos de 32 bits usando o emulador WoW64.Entretanto, processos podem ter apenas 32 bits ou 64 bits.Não é possível ter um processo que execute ambos.

Serviços de Informações da Internet (IIS) executam como aplicativos de 64 bits em versões de 64 bits do Windows.O tipo de processo de um componente COM deve corresponder ao tipo processo de trabalho do IIS.É possível executar componentes de 32 bits na versão de 64 bits do IIS usando uma dos seguintes soluções:

É recomendável que você converta os seus componentes para 64 bits.No caso de componentes do Visual Basic, isto não é possível pois há nenhuma versão de 64 bits do compilador do Visual Basic.

Consulte também

Tarefas

Como: Atualizar permissões para Components MTS existentes no ASP.NET

Conceitos

Expondo componentes COM para o .NET Framework

Criando componentes de COM para interoperação

Pastas de código compartilhado em sites da Web ASP.NET