Migrando ASP a ASP.NET
Daniel A. SearaDirector Regional MSDNNDSoft
ASP (Lo Bueno)• Tecnología líder en desarrollo para Web
Más de un millón de desarrolladores en ASP• Desarrollo simple
HTML combinado con script No requiere compilación – “sólo grabar”
• Flexible y extensible Soporta múltiples lenguajes
VBScript, JScript®, etc. Puede utilizar Objetos COM para acceder a
recursos y encapsular lógica de negocios
ASP (Lo Malo y lo Feo)• ¡El código ASP se vuelve complicado!• Requiere demasiado código
Para cualquier cosa se necesita escribir código
• Código mezclado con contenido• Sólo soporta lenguajes de scripting• La implementación de componentes y la
configuración es compleja DLLs bloqueadas, regsvr32, metabase de IIS
• Estado de Sesión limitado a un único servidor
Compatibilidad con ASP• Migrar aplicaciones de ASP a ASP.NET
siempre va a requerir cierto trabajo
• Se decidió romper la “compatibilidad hacia atrás” en ciertos puntos para mejorar la plataforma Tenemos más tiempo por delante en Internet
que por detrás Nos permite asegurar una plataforma por
mucho más tiempo
ASP: Soporte conjunto• ASP.NET corre “lado a lado” con ASP
Extensiones de archivo distintas (.aspx vs .asp) Configuraciones separadas
• Las páginas/aplicaciones ASP siguen utilizando el motor de ASP existente sin problemas No se han hecho cambios a ASP.DLL Ningún componente se “rompe” al instalar ASP.NET
• Importante: no se comparte estado entre páginas/aplicaciones ASP y ASP.NET
Cambios en la API• Con tres excepciones, ASP.NET es
100% API compatible con ASP
• Cambios de API previstos:Request() Array -> StringRequest.QueryString() Array -> StringRequest.Form() Array -> String
Cambios en la API: detalles• En ASP, las colecciones Request,
Request.QueryString y Request.Form devuelven Vectores de caracteres (StringArrays)
http://localhost/test/Test.asp?values=45&values=600
<%
‘ La línea siguiente retorna: “45, 600”
Response.Write Request.QueryString(“values”)
‘La línea siguiente retorna : “45”
Response.Write Request.QueryString(“values”)(1)
%>
Cambios en la API: detalles
• En ASP.NET estas colecciones requieren un método explícito para obtener un array Estos vectores ahora son “índice 0”
http://localhost/test/Test.aspx?values=45&values=600
<%
‘ La línea siguiente retorna : “45, 600”
Response.Write(Request.QueryString.GetValues(“values”))
‘ La línea siguiente retorna : “45”
Response.Write(Request.QueryString.GetValues(“values”)(0))
%>
Cambios en la API: detalles
• Escenarios de uso más frecuentes:
Multi-select list box: <select múltiple>
Múltiples casillas de verificación (checkbox) con el mismo nombre
Cambios semánticos• Hay varios cambios semánticos en
ASP.NET• Tópicos:
Lenguaje único en cada página Las funciones deben declararse en bloques
<script runat=server>No se soportan funciones de “rendering”
Lenguaje único en cada página
• ASP permitía tener múltiples lenguajes en una misma página
• ASP.NET sólo soporta un único lenguaje por páginaSe puede tener varias páginas, cada una
con un lenguaje diferente
Declaración de funciones• En ASP las funciones de cada página
podían declararse dentro de bloques <% %>
<%
Sub HacerAlgo()
Response.Write “¡Hola, Mundo!”
End Sub
HacerAlgo
%>
Declaración de funciones• En ASP.NET las funciones de cada página
deben declararse de la siguiente manera:
<script language=“VB” runat=server>
Sub HacerAlgo()
Response.Write (“¡Hola, Mundo!”)
End Sub
</script>
<% HacerAlgo() %>
Funciones de “rendering”• En ASP las funciones de rendering
podían declararse en bloques <% %>
<% Sub RenderAlgo() %>
<font color=“red”> Son las: <%=Now %> </font>
<% End Sub %>
<%
RenderAlgo
RenderAlgo
%>
Funciones de “rendering”• En ASP.NET estas funciones se deben re-
escribir con <script runat=server><script language=“VB” runat=server>
Sub RenderAlgo()
Response.Write(“<font color=red> “)
Response.Write(“Son las: “ & Now)
End Sub
</script>
<% RenderAlgo() %>
Cambios en el lenguaje Visual Basic®
• Cambios VBScript->VB7: serán el mayor problema a la hora de migrar
• Grandes tópicos: Las variables DEBEN declararse,
así como indicarse su tipo No hay más “Set” y “Let” No hay más “Propiedad por Defecto”
(importante) Se requieren paréntesis para invocar a Subs Los parámetros son ByVal
por defectoMás detalles
No hay más “Set” y “Let”• Usar asignaciones de variables
<%
‘ Sintaxis ASP
Dim MyConn
Set MyConn = Server.CreateObject(“ADODB.Connection”)
‘ Nueva sintaxis ASP.NET
Dim MyConn
MyConn = Server.CreateObject(“ADODB.Connection”)
%>
No hay más “Propiedad por Defecto”
‘ Sintaxis ASP (para obtener el valor de una columna)
Set MyConn = Server.CreateObject(“ADODB.Connection”)
MyConn.Open(“TestDB”)
Set RS = MyConn.Execute(“Select * from Products”)
Response.Write RS(“Name”)
‘ Nueva sintaxis ASP.NET (para obtener el valor de una columna)
MyConn = Server.CreateObject(“ADODB.Connection”)
MyConn.Open(“TestDB”)
RS = MyConn.Execute(“Select * from Products”)
Response.Write RS(“Name”).Value
Paréntesis en Subrutinas• En ASP.NET se requieren paréntesis al
invocar una Sub
‘ Paréntesis en Response.Write()
Sub HacerAlgo()
Response.Write( “¡Hola, Mundo!” )
End Sub
‘ Paréntesis en HacerAlgo()
HacerAlgo()
Parámetros ByVal por defecto• Los parámetros se deben declarar ByRef si
se quiere obtener lo siguiente<script language=“VB” runat=server>
Sub HacerAlgo(ByRef value)
value = 4343
End Sub
</script>
<% Dim number = 55
HacerAlgo (number)
Response.Write (“Número: “ & number)
%>
Las variables “Deben” existir
• A diferencia de lo que sucede en las páginas ASP, en ASPX todas las variables deben ser declaradas (indicando su tipo específico)
Algunas cosas pueden necesitar configuración
• Si se utilizan objetos cuyo modelo de ejecución sea “apartamento” (Apartment Threaded), se debe indicar compatibilidad con ASP en la página<%@ Page aspcompat=true %>
Más Información• En nuestra Comunidad
http://www.microsoft.com/latam/msdn/comunidad/comunidades/asp/
• Otros Sitioswww.asp.nethttp://asp.net.do/
(en español)