Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/07/2004, 08:10
Avatar de padrino
padrino
 
Fecha de Ingreso: mayo-2004
Ubicación: Aguascalientes, Ags. la tierra de la gente buena
Mensajes: 161
Antigüedad: 20 años
Puntos: 0
como migrar de asp a net

Actualmente se está trabajando en la migración de las librerías necesarias (encabezado, menú, navegación y pie de página) y ya se tienen avances en la funcionalidad para .NET, el problema es al querer exponer las librerías .NET en las páginas antiguas.

Para lograr exponer en COM librerías .NET se hizo lo siguiente:

- Crear una llave de Strong Name para todas las librerías librería ( sn –k asp.snk), se utiliza la misma llave para todos los archivos.

- Indicar en el Archivo AssemblyInfo.cs de cada librería que utilizarán el archivo asp.snk ([assembly: AssemblyKeyFile("..\\..\\asp.snk")])

- Registrarlas en el GAC (Global Assenbly Cache) (gacutil /i webcontrols.menu.dll)

- Se utiliza el exportador de la biblioteca de tipos (tlbexp.exe) para generar el archivo .tlb y la herramienta de registro de ensamblados (regasm.exe) para dar de alta en el registro de Windows (regasm c:\vss\lib\webcontrols\menu\bin\debug\webcontrols. menu.dll /tlb:webcontrols.menu.tlb)


Hasta aquí todo bien.

El error surge al querer usar alguna clase .NET que utilice la clase HttpContext con cualquiera de sus miembros (Current, Request, Response, ServerVariables, etc.) en el ASP necesario.


Por ejemplo: En la clase WebControls.Menu se usa la instrucción: cadenaQuery=HttpContext.Current.Request.QueryStrin g.AllKeys.ToString();


Y cuando se hace referencia en el ASP a esa clase



<%Dim obj
Set obj = Server.CreateObject("Inegi.Sitio.Lib.WebControls.M enu")%>

<%=obj.GeneraMenu(0)%>



Marca el siguiente error:



WebControls.Menu (0x80004003)
Referencia a objeto no establecida como instancia de un objeto.



Se puede hacer referencia al encabezado sin problema puesto que en él por el momento no se utiliza el HttpContext



<%=obj.GeneraEncabezado(0)%>

Este error detiene el desempeño de las páginas puesto que para el menú y la navegación se utilizan variables enviadas por QueryString ademas de Variables de Sesión (entre otros).

Para evitar ese error se solucionó creando una página ASP intermedia que obtiene estas variables y se las manda a la librería como String.

Código de Intermedio.ASP

<%Dim obj
Set obj = Server.CreateObject("Inegi.Sitio.Lib.Template.Web. ASP")%>
<%obj.Appl_Physical_Path=Request.ServerVariables(" APPL_PHYSICAL_PATH")
obj.Script_Name=Request.ServerVariables("Script_Na me")
obj.Remote_Addr=Request.ServerVariables("Remote_Ad dr")
obj.CadenaQuery=(Request.ServerVariables("script_n ame")+"?"+Request.ServerVariables("query_string") )
<%=obj.GeneraEncabezado(0)%>

<%=obj.GeneraMenu(0)%>


Existe una instrucción con la que se puede permitir la compatibilidad entre .NET y COM, es ASPCOMPAT (<%@ page aspcompat=true %>) pero se utiliza para importar en .NET objetos COM y lo que se desea hacer es lo contrario (.Net en COM).

(http://www.aspnetfaq.com/default.aspx?CategoryId=&FaqId=139&SearchString=<% @%20page%20aspcompat=true%20%>)

Quiero saber si hay una forma de evitar este error y lograr un buen desempeño de las nuevas páginas al convivir con las antiguas mientras se termina la migración.
__________________
The God Father
__________________________________________
No hay un error tan grande como el de no seguir adelante (:pensando:) William Blake