Compatibilità dei componenti COM
Aggiornamento: novembre 2007
La maggior parte dei componenti COM funzionerà con ASP.NET. Analogamente alle versioni precedenti di Active Server Pages (ASP), è ancora possibile effettuare chiamate ad associazione tardiva ai componenti utilizzando Funzione CreateObject (Visual Basic). Per ulteriori informazioni, vedere Interoperabilità COM nelle applicazioni .NET Framework.
In questo argomento sono contenute le seguenti sezioni:
Associazione anticipata
Componenti a 64 bit
Associazione anticipata
L'associazione tardiva ai componenti è ancora supportata, ma per motivi di prestazioni si consiglia di scegliere l'associazione anticipata. Lo strumento denominato Utilità di importazione della libreria dei tipi (Tlbimp.exe), incluso in Windows Software Development Kit (SDK), consente di convertire i componenti COM standard contenuti nei file DLL negli assembly .NET Framework equivalenti mediante la compilazione di wrapper gestiti per i componenti. I componenti convertiti possono essere associati anticipatamente al codice gestito per ottenere prestazioni notevolmente migliorate. Per ulteriori informazioni su Tlbimp.exe, vedere Esposizione di componenti COM a .NET Framework. Per informazioni sulla conversione dei componenti COM in codice gestito, vedere Generazione di componenti COM per l'interoperabilità.
Dopo aver convertito il componente COM in un assembly .NET Framework, è possibile importarlo in una pagina ASP.NET inserendo una direttiva nella parte superiore della pagina. Mediante la seguente direttiva, ad esempio, viene importato lo spazio dei nomi MyNewNamespace, creato da Tlbimp.exe:
<%@Import Namespace="MyNewNamespace"%>
Il file assembly generato da Tlbimp.exe deve essere posizionato nella directory Bin dell'applicazione ASP.NET. Il file del componente COM originale deve essere registrato per la directory in cui risiede.
Quando si utilizzano componenti COM in un apartment a thread singolo (STA), come quelli sviluppati mediante Visual Basic, da una pagina ASP.NET, è necessario includere l'attributo di compatibilità AspCompat=true in un tag <%@ Page > nella pagina ASP.NET, come illustrato nell'esempio di codice riportato di seguito.
<%@Page AspCompat=true Language = VB%>
Con l'attributo AspCompat la pagina viene eseguita in modalità STA. In fase di runtime viene generata un'eccezione se si omette il tag di compatibilità e si fa riferimento a un componente STA della pagina. Se il componente STA viene convertito in un assembly mediante Tlbimp.exe, in fase di esecuzione non verrà rilevato che il componente utilizza il modello STA e non verrà generata un'eccezione, ma è possibile che le prestazioni dell'applicazione siano insufficienti.
Nota importante: |
---|
I componenti COM creati al momento della costruzione vengono eseguiti prima che la richiesta venga pianificata per il pool di thread STA e di conseguenza eseguiti su un thread MTA. Tale situazione ha un impatto sostanzialmente negativo sulle prestazioni ed è pertanto consigliabile evitarla. Se si utilizza la modalità AspCompat con i componenti STA, è consigliabile creare componenti COM solo dall'evento Page_Load o in un momento successivo nella catena di esecuzione, ma non in fase di costruzione della pagina. |
Nella dichiarazione di membro riportata di seguito, ad esempio, viene creato un componente COM al momento della costruzione.
<%@ 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>
È invece opportuno utilizzare codice analogo a quello riportato di seguito.
<%@ 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>
Componenti a 64 bit
In una versione a 64 bit di Microsoft Windows è possibile eseguire applicazioni a 32 bit utilizzando l'emulatore WOW64. I processi, tuttavia, possono essere solo a 32 bit o 64 bit e non è possibile eseguirli in entrambe le modalità.
Internet Information Services (IIS) viene eseguito come applicazione a 64 bit su versioni a 64 bit di Windows. Il tipo di processo di un componente COM deve corrispondere al tipo di processo di lavoro IIS. È possibile eseguire componenti a 32 bit sulla versione a 64 bit di IIS utilizzando una delle seguenti soluzioni:
Configurando il componente COM come applicazione COM+ in modo da eseguirlo in Dllhost.exe.
Configurando IIS per l'esecuzione delle applicazioni a 32 bit. Questa opzione influisce su tutte le applicazioni installate sul server IIS. Per ulteriori informazioni, vedere Appendix D: Running 32-bit Applications on 64-bit Windows (IIS 6.0) nella IIS Deployment Guide (informazioni in lingua inglese).
È consigliabile convertire i componenti in 64 bit. Con i componenti di Visual Basic, questa operazione non è possibile in quanto non è disponibile una versione a 64 bit del compilatore Visual Basic.
Vedere anche
Attività
Procedura: aggiornare le autorizzazioni per i componenti MTS di ASP.NET esistenti
Concetti
Esposizione di componenti COM a .NET Framework