|
Migración a ASP .NET: consideraciones clave
Cambios relacionados con COM
Con la introducción de .NET Framework y ASP .NET, en
realidad COM no ha cambiado nada. No obstante, hay que seguir
vigilando los objetos COM y su comportamiento cuando se
emplean en ASP .NET. Es necesario tener en cuenta una serie de
puntos esenciales.
Cambios en el modelo de subprocesos
El modelo de subprocesos de ASP .NET es el subprocesamiento
controlado múltiple MTA (Multiple Threaded Apartment). Esto
significa que los componentes que utilice y que fueron creados
para el subprocesamiento controlado simple STA (Single
Threaded Apartment) ya no funcionarán, al menos de modo
confiable, a menos que se tomen medidas de precaución
adicionales en ASP. NET. Esto incluye, aunque no se limita a,
todos los componentes COM creados con Visual Basic 6.0 o
versiones anteriores.
Atributo ASPCOMPAT
Le gustará saber que todavía puede utilizar estos
componentes STA sin tener que modificar el código. Simplemente
hay que incluir el atributo de compatibilidad
aspcompat=true en una etiqueta <%@Page>
en la página ASP .NET. Por ejemplo, <%@Page
aspcompat=true Language=VB%>. Este atributo obligará a
la página a ejecutarse en modo STA, garantizando de paso el
correcto funcionamiento de los componentes. Si intenta
utilizar un componente STA sin especificar esta etiqueta, el
tiempo de ejecución enviará una excepción.
Establecer el valor de este atributo como true también
permitirá a la página llamar a componentes de COM+ 1.0 que
requieran acceso a objetos no administrados integrados en ASP.
Se puede tener acceso a estos objetos a través de
ObjectContext.
Si se define esta etiqueta como true, el rendimiento
disminuirá ligeramente. Es aconsejable no realizar esta
operación a menos que sea imprescindible.
Enlace en tiempo de compilación frente a enlace en tiempo
de ejecución
En ASP, todas las llamadas a objetos COM se llevan a cabo
en la interfaz IDispatch. Esto se denomina "enlace en
tiempo de ejecución" porque las llamadas a los objetos reales
se controlan indirectamente a través de IDispatch
en tiempo de ejecución. En ASP .NET, puede continuar
invocando los componentes de esta manera si así lo desea.
Dim Obj As Object
Obj = Server.CreateObject("ProgID")
Obj.MyMethodCall
Aunque esto funciona, no es la manera más idónea de tener
acceso a los componentes. Con ASP .NET, ahora puede aprovechar
el enlace en tiempo de compilación para crear los objetos
directamente de la siguiente manera:
Dim Obj As New MyObject
MyObject.MyMethodCall()
El enlace en tiempo de compilación permite interactuar con
los componentes de una manera segura para los tipos. Para
aprovechar el enlace en tiempo de compilación con los
componentes COM, necesitará agregar una referencia en el
proyecto del mismo modo en que agregaría una referencia COM a
un proyecto de Visual Basic 6.0. Asumiendo que utiliza Visual
Studio .NET, se crea un objeto proxy administrado en segundo
plano sobre su componente COM, dando la impresión de que está
tratando directamente con el componente COM como si fuera un
componente .NET.
Llegado a este punto puede que se pregunte por el
rendimiento. Puesto que ahora la interoperabilidad COM incluye
una capa extra debido al objeto proxy, es natural que se
reduzca un poco la velocidad de computación. En la mayoría de
los casos, sin embargo, esta pérdida carece de importancia
debido a que la interoperación sigue necesitando un número de
instrucciones CPU reales sustancialmente menor que el que
necesitan las llamadas IDispatch indirectas. Por lo
tanto, ganará más de lo que pierde. La situación ideal, por
supuesto, es utilizar objetos administrados de reciente
creación, pero todos sabemos que no siempre se pueden obtener
de inmediato debido a nuestra inversión en componentes COM a
lo largo de los años.
Métodos OnStartPage y OnEndPage
Un punto que merece especial atención está relacionado con
el uso de los métodos heredados OnStartPage y
OnEndPage. Si se confía en estos métodos para tener acceso
a objetos intrínsecos ASP, se tendrá que utilizar la directiva
ASPCOMPAT y emplear Server.CreateObject para
crear el componente de una manera de enlace en tiempo de
compilación, como se muestra en el siguiente ejemplo:
Dim Obj As MyObj
Obj = Server.CreateObject(MyObj)
Obj.MyMethodCall()
Tenga en cuenta que en lugar de usar "ProgID", hemos
utilizado el tipo en forma de enlace en tiempo de compilación.
Para que todo esto funcione, deberá agregar una referencia al
componente COM de su proyecto Visual Studio para que se cree
la clase envolvente en tiempo de compilación. Éste debería ser
el único caso en el que hay que seguir utilizando
Server.CreateObject.
Resumen de COM
La tabla 2 es un resumen de lo que necesita hacer para
continuar utilizando los componentes COM de la manera más
eficaz posible.
Tabla 2. Configuración ASP .NET para objetos COM
heredados
| Tipo o método de
componente COM |
Configuración o
procedimientos ASP .NET |
| STA personalizado
(componentes de Visual Basic u otros componentes
identificados como "Apartment") |
Utilice ASPCOMPAT,
utilice enlace en tiempo de compilación |
| MTA personalizado
(componentes ATL o COM personalizados identificados como
"Both" o "Free") |
No utilice ASPCOMPAT,
sino enlace en tiempo de compilación |
| Objetos intrínsecos
(a los que se obtiene acceso a través de ObjectContext) |
Utilice ASPCOMPAT,
utilice enlace en tiempo de compilación |
| OnStartPage,
OnEndPage |
Utilice ASPCOMPAT,
utilice Server.CreateObject(Type) |
No importa que los componentes se distribuyan en COM+ o no.
Estas mismas configuraciones se aplican siempre.
LO ÚLTIMO
en tu Correo.
Suscríbete Gratis a NUESTRO BOLETÍN !!
Te Agradeceríamos nos informes si encuentras un
ENLACE
ROTO
|