Foros del Web » Programación para mayores de 30 ;) » .NET »

como migrar de asp a net

Estas en el tema de como migrar de asp a net en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/07/2004, 08:10
Avatar de 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
  #2 (permalink)  
Antiguo 06/07/2004, 18:58
 
Fecha de Ingreso: mayo-2004
Ubicación: Guadalajara, Jalisco, México
Mensajes: 724
Antigüedad: 20 años
Puntos: 6
En .NET ya no es necesario que especifiques todo entre <% ... %> eso lo puedes hacer con el code behind...

Es decir.. tratas de usar ASP.NET como si fueran las ASP.. ?


Hay muche gente que programa en webmatrix... pero... con VS.NET y el code be hind hay mucha mucha diferencia...

Con respecto a tu problema, no puedes usar componentes COM asi de simpe,.. tendrás que convertirlos a Ensamblados de .NET....


Te pondré una parte del libro de certificacion (ebook)
Cita:
Instantiate and Invoke a COM or COM+ Component
COM components are used in distributed enterprise applications to encapsulate
the business logic. As mentioned earlier, the user interface that implements these
components can be a Web application using ASP, a Win32 client application
developed in Visual Basic, Visual C++ and the like, or VBA code in a Microsoft
Office application. Most COM components will work with ASP.NET, and can be
instantiated and invoked in the same manner as they are handled with classic ASP,
using late binding.
As an example, the following code will instantiate a COM component that has a
ProgID of MyApp.Getdata in ASP.NET:
Dim objData as Object
objData = Server.CreateObject("MyApp.GetData")
The only difference between this VB.NET code in ASP.NET and classic ASP is
the language syntax. VB.NET does not use the Set statement that was required in
VBScript. Because VBScript is not compiled, it always uses late binding. ASP.NET
can use early binding, which is much more efficient. Early binding requires a
reference to the object’s type library and an explicit declaration of the object. This
enables the resolution of the object’s definition at compile time rather than at run
time (late binding), resulting in increased performance.
To use early binding, the COM components in the DLL files must be converted to
.NET Framework assemblies. This is accomplished using the Type Library Importer
(Tlbimp.exe) included with the .NET Framework SDK. This utility builds managed code wrappers around the COM components, allowing them to be early bound to
managed code in ASP.NET. The assembly file built by Tlbimp.exe must be placed in
the Web application’s \bin directory. To simplify the use of the component, you then
include a directive in the code to import the namespace:
<%@Import Namespace="ConvertedComDll"%>
If the COM component is single threaded (STA) you must include the
aspcompat=true in the @Page directive, which forces the page to execute in singlethreaded
mode. All COM components developed in Visual Basic are STA and will throw an exception if the ASP compatibility attribute is not set. STA components
can be used only in ASP.NET pages in the .NET Framework; they cannot be used
from compiled .NET assemblies.

Espero que te sirva.. por cierto.. tu problema es una pregunta de examen

Por cierto el Set ya no existe en ASP.NET
Código:
<%Dim obj
Set obj = Server.CreateObject("Inegi.Sitio.Lib.WebControls.Menu")%>

<%=obj.GeneraMenu(0)%>

Saludos !!
  #3 (permalink)  
Antiguo 15/07/2004, 10:11
 
Fecha de Ingreso: julio-2004
Ubicación: Aguascalientes, Ags.
Mensajes: 7
Antigüedad: 19 años, 9 meses
Puntos: 0
Soy el del problema

Hola, soy el que esta teniendo problemas con ASP y ASP.NET, otra persona del departamento refirió aquí el problema para tratar de ayudarnos.

Creo que no quedó claro cual es el problema, el código mostrado

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

Reside en un archivo ASP, por eso se siguen usando <% %>, lo que se trata es importar los user controls hechos en .NET (encabezado, menu y pie de página) en páginas ASP 3.0, el error surge cuando se trata de usar HTTPCONTEXT, supongo que porque ASP 3.0 no reconoce esta instrucción.

Tu respuesta si me va a servir puesto que también tengo que importar COM en .NET, al respecto tengo una duda, ¿como puedo utilizar un ASP con código en JAVAScript en una página ASPX?

Gracias.

PD: Me agradó mucho el comentario de que mi problema es pregunta de exámen
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:11.