Introducción a la plataforma .NET y Mono

Patxi Echarte, May 11th, 2005

Ejemplos de aplicaciones

Consola

El ejemplo más sencillo y típico cuando se comienza a aprender un nuevo lenguaje, es el “hello world”.

using System.IO;
Namespace MonoDemo{
   public class HelloWorld{
      static public void Main(){
      Console.WriteLine("Hello world");
      }
   }
}

Para compilar y ejecutar, habría que guardar el archivo con el nombre hello.cs por ejemplo, y ejecutar lo siguiente:

$ mcs hello.cs
$ mono hello.exe
Hello world

ASP.NET

ASP.NET es un gran salto cualitativo desde el modo de realizar aplicaciones con el ASP tradicional o lenguajes como PHP o JSP.
Dispone de dos características que lo hacen novedoso:

  1. Programación basada en eventos: la mayoría de los lenguajes con los que se realizan aplicaciones Web, son lenguajes cuyo flujo de ejecución es lineal, es decir, se ejecuta una acción tras otra, siguiendo un flujo establecido. Desde la aparición de los sistemas operativos gráficos, el desarrollo de aplicaciones se ha basado en una programación orientada en eventos, en la cual la ejecución del código no es lineal, si no que depende de los eventos que se vayan recibiendo desde el sistema. En ASP.NET, es posible programar utilizando un modo de programación lineal, pero nos ofrece también la posibilidad de programar utilizando un modo basado en eventos.
  2. Controles: ASP.NET dispone de un conjunto de controles, que insertados en el código html de la página, nos permiten controlar el contenido de la misma. De esta forma se consigue separar en gran medida el diseño de la lógica de programación, un caballo de batalla muy frecuente en el desarrollo de aplicaciones web.

Programación basada en eventos

Mediante ASP.NET se puede indicar que determinados controles generen un evento que se capture en el servidor. Para ello, cuando el evento se produce en el cliente la página se envía por POST al servidor, el cual identifica el evento que se ha generado y realiza la acción asociada. Debido a que este tipo de funcionamiento obliga a enviar información al servidor y pedir una nueva página ante cada evento, no se pueden gestionar todos los eventos que se podrían producir en el cliente. Así por ejemplo no tiene sentido capturar en el servidor el evento mouseover, sin embargo sí sería lógico capturar el pulsar sobre un botón.

Controles Web

Como se ha comentado el objetivo de los controles web es permitir separar la lógica de la presentación. Para ello hay diversos tipos de controles que se detallarán a continuación. Estos controles se incluyen en la página web mediante tags que incluyen el atributo runat="server". Con este atributo se le informa al parseador que deberá crear una instancia del control correspondiente para poder acceder a su información desde la lógica. En concreto se consiguen las siguientes ventajas utilizando controles de servidor:

  • Acceder a él desde la lógica.
  • Mantener el estado entre accesos al servidor
  • Generar eventos que pueden ser capturados en el servidor
  • Generar código específico para cada navegador

Los controles más sencillos son los controles HTML de servidor, que heredan de System.Web.UI.Control.HtmlControl en el namespace System.Web.UI.HtmlControls. Estos controles son los equivalentes a los controles Html tradicionales. Su principal utilidad es facilitar la migración de aplicaciones existentes. Tienen como desventaja que pese a poder acceder a ellos desde la lógica, su interfaz de acceso no es homogéneo con el resto de componentes y que no pueden responder a eventos.

Un segundo tipo de controles son los denominados Web Controls, que heredan de System.Web.UI.Control en el namespace System.Web.UI.WebControls. Estos controles ofrecen un modo de acceso más homogéneo, a la vez que no están limitados a los controles existentes en html, sino que se dispone de controles más complejos como: paneles, repeaters, datagrids, listas de opciones…

A continuación se muestra una comparativa entre los controles html y los controles web:

Controles HTML
  • Facilitan la transición desde páginas html o asp
  • Modo de acceso similar al existente en html
  • Se pueden utilizar con entornos de diseño de html directamente
  • Más fácil interactuar con scripts en la parte cliente
Controles WEB
  • Permiten programar basado en eventos
  • Controles más potentes
  • Se reduce el riesgo de errores, al disponer de un interfaz más homogéneo
  • Soporta “event bubbling” en controles anidados
  • Generación específica de html para navegadores uplevel (html 4.0) y downlevel (html 3.2)

Aparte de los controles Web existentes se pueden crear nuevos controles de 3 formas distintas:

  • Derivando directamente de la clase base System.Web.UI.Control. Se les denomina full custom controls.
  • Derivando de un control ya existente. Se les denomina derived custom control.
  • Uniendo varios controles existentes. Se les denomina composite custom controls.

Aparte de estos controles denominados genéricamente Custom Controls, existe un último grupo llamado User Controls. Este tipo de controles permite reutilizar bloques de páginas en diferentes páginas, son el equivalente a los includes en lenguajes como PHP o JSP. La ventaja de estos controles es que se puede acceder a ellos desde la parte de la lógica asociada al control y disponen también de la opción de responder a eventos.

Otras características

Aparte de estas dos características comentadas ASP.NET incluye muchas más funcionalidades que facilitan en gran medida la programación de aplicaciones web. Entre ellas destacan:

  • Caching de páginas y controles: permite indicar que una página o control no se genere bajo cada petición, sino que su resultado html se mantenga en caché y sea devuelto en sucesivas peticiones.
  • Mantenimiento del estado en páginas: se realiza mediante un control oculto en el formulario html de la página (__VIEWSTATE). En este control se guarda en forma encriptada el estado de los controles de la página, de forma que al realizar peticiones de la página al servidor, no sea necesario regenerar todo el html. Esta característica se muestra especialmente interesante por ejemplo, cuando se utiliza para cargar en un paso inicial los datos de un formulario con información de una base de datos y en siguientes peticiones este estado se mantiene transparentemente. Aparte de la información de los controles de la página es posible guardar otros tipos de información que hagan referencia a la página en proceso, en vez de utilizar la sesión del usuario. La conveniencia de utilizar un mecanismo u otro, dependerá de la situación.
  • Caching de información: se disponde de una cache en la cual se puede almacenar cualquier tipo de información. Los elementos de esta cache pueden asociarse con otros elementos de la caché o con archivos externos, para producir actualizaciones en cascada.
  • Las páginas se compilan, con lo que el rendimiento es mayor.
  • 3 tipos de páginas:
    • Code in page: la lógica y la presentación están en un mismo archivo aspx.
    • Code behind con src: la lógica y la presentación están en archivos independientes, aspx y aspx.cs, por ejemplo. Cuando se solicita la página por primera vez, se realiza la compilación del cs.
    • Code behind compilado: la lógica de las páginas reside en archivos separados, al igual que en el caso anterior, pero el código ha sido precompilado en librerías, por lo que no es necesario distribuir los fuentes.

Ejemplos

A continuación se muestran varios ejemplos de código:

  • hola mundo en ASP.NET con C# embebido descargar
  • hola mundo en ASP.NET con control HTML descargar
  • hola mundo en ASP.NET con control Web descargar
  • hola mundo en ASP.NET con evento de servidor descargar
  • Hola mundo en ASP.NET con evento de servidor, y código en un archivo independiente compilado on the fly descargar
  • Repeater con información de la base de datos y código precompilado descargar
  • Formulario de registro y código precompilado descargar
Comparte esta información

54 Comentarios para “Introducción a la plataforma .NET y Mono”

  1. Jose Ramón dice:

    !!muy interesante!! gracias !!!

    me lo leeré más tranquilamente, pero a primera vista, para los que venimos del mundillo de Java exclusivamente, me parece una introducción muy buena.
    Aunque, la comparativa de Java con C# quizás debería estar más actualizada con el JDK 1.5, que tiene enumerados, bucles foreach sobre las colecciones… ;) (solo por decir algo)

  2. Jacki dice:

    esta muy interesante!!!!!!!!!!!
    creo que es super intersante la informacion detallada, para quienes quieren ponerse al dia en la tecnologia, pero deberian actualizar mucho mas!!!
    =oD

  3. Javier G dice:

    Me gusto yo boje mono pero no se como se instala me gustaria saber instalar mono en mac os x tambien quiero instalar el mod_mono para apache y xsp. gracias esta pag. es muy buena

  4. hiphop dice:

    Está mono ya terminado para soportar web services?

  5. Patxi dice:

    Mono soporta web services de forma completa en este momento. Yo he hecho algunas pruebas consumiendo servicios generados desde aplicaciones .NET de microsoft, así como servicios web buscados por internet y funciona a la perfección. En cuanto a la parte de ofrecer servicios web sobre mono, lo he probado poco pero me ha funcionado correctamente, aparte sí que hay gente que lo está utilizando bastante.

  6. ricardo dice:

    Es buen articulo.
    Sabes quisiera saber los pasos para correr un ejemplo de ASP.net con apache en linux fedora:
    me descargue el mono 1.1 para fedora y los servidores web mon_mono y xsp que hago ??????????

  7. Patxi dice:

    Lo que te recomiendo es que antes de ponerte a configurar apache con mod_mono, pruebes directamente a ejecutar una página de test hecha en ASP.NET, utilizando directamente xsp.exe

    Para ello créate una carpeta con el archivo ASP.NET que vayas a utilizar y desde una consola ejecuta “mono xsp.exe”, para que se lance el servidor. Puedes utilizar “mono xsp.exe –help” para obtener las distintas opciones soportadas. Asegúrate de utilizar un puerto distinto al 80 si tienes apache corriendo, por ejemplo el 8080.

    Ahora ya podrías abrir el navegador y acceder a la página ASP.NET de prueba, utilizando por ejemplo: http://localhost:8080/test.aspx

  8. ricardo dice:

    Hola, sabes, no entiendo porque tendría que probar una pagina asp.net con xsp.exe si al final quiero pobrar mi pagina asp.net en LINUX con apache y para apache necesito saber instalar el mod_mono. Me podrias explicar porque tendría que hacer lo anterior.
    Gracias.

  9. Patxi dice:

    Basicamente es para acotar posibles errores. Apache utiliza mod_mono para servir páginas asp.net y éste se comunica por debajo con xsp.exe para procesar la petición. Por eso lo que te recomiendo es que si haciendo la instalación normal de apache, mono y mod_mono te encuentras con algún problema, pruebes que xsp.exe funciona correctamente y una vez probado utilices mod_mono para comunicarlo con apache. Si lo pruebas todo a la vez vas a tener más difícil saber si no te funciona porque esté mal configurado apache, mod_mono, xsp o mono.

  10. GuillermoTola dice:

    De donde consigo el instalador de CLR (Runtime)
    Tengo que realizar un instalador para eso necesito un CLR
    donde cvonsigo o viene con los instaladores de Visual Studio 7.0
    Pronto

  11. Patxi dice:

    El instalador del .NET Framework de Microsoft lo puedes obtenerlo en http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3 y el de Mono en http://www.mono-project.com/Downloads

  12. Javier dice:

    Hola, me gustaria saber si se pueden correr las paginas asp.net desde el dreamweaver, es decir, en lugar de utilizar el IIS utilizar apache con el mod_mono.

  13. FRANCISCO dice:

    Hola, quisiera que me dieran una direccion web para descargar el compilador mas actual de C#.Net o algo relacionado gracias

  14. Fernix dice:

    Comence a migrar un proyecto realizado en .net con C#. Descargue el mono 1.1.8.3 que viene con el servidor para asp.net XSP. Pero no se cómo ejecutar la aplicacion. Aguien me puede decir cómo?

  15. NETXO dice:

    Hola,
    estoy haciendo mi proyecto Fin de Carrera sobre la plataforma .NET y los webservices, y de todas las páginas y foros que he leído éste es el mejor.
    A Fernix no le entiendo bien la pregunta, la aplicación de mono se lanza escribiendo en la consola “mono nombre_del_ejecutable” y para conseguir el ejecutable escribes el código y lo compilas escribiendo “mcs nombre_del_programa”. mcs es el compilador de mono.
    Un saludo.

  16. NETXO dice:

    que se me había olvidado!

    Felicidades por la página Patxi!

  17. Patxi dice:

    Hola NETXO, Fernix se refiere a cómo ejecutar una aplicación web. Mediante el comando “mono ejecutable” lanzas una aplicación digamos de consola o escritorio, pero si lo que has preparado es un conjunto de páginas web realizadas con ASP.NET, hay que lanzar antes un servidor al que pedirle estas páginas. De esto se encarga xsp.exe, puedes ejecutarlo y lo que crea en un demonio que escucha en el puerto seleccionado las peticiones que se le vayan realizando. Aparte de esta opción, que es recomendable únicamente para pruebas o desarrollo, lo conveniente es utilizar como servidor web apache y conectarlo con mono mediante el módulo mod_mono.

  18. NETXO dice:

    Hola,

    quiero hacer unas pruebas con xsp y al escribir “mono xsp.exe ” en la consola , me sale lo siguiente:

    cannot open assembly xsp.exe

    ¿estoy haciendo algo mal?

    gracias.

  19. NETXO dice:

    Parece que ya va todo ok, con poner “xsp” ya se me ha lanzado el servidor.

  20. laestrella dice:

    la introduccion de la plataforma.net y mono es muy buena

  21. NETXO dice:

    Hola,

    tengo una duda sobre los servicios web; quiero hacer un servicio web y he encontrado información sobre servicios web de ASP.NET (.asmx), todo los servicios web son de ASP.NET o ASP.NET es un tipo de servicios web…?

    Gracias.

  22. Patxi dice:

    ASP.NET es el nombre que dio Microsoft a la parte del Framework encargada de servir páginas web. Las páginas basadas en ASP.NET tendrán normalmente la extensión .aspx. Una parte de ASP.NET son los servicios web, que suelen tener la extendión .asmx.

    De todas formas ten en cuenta, que así como es posible hacer páginas web con otras tecnologías diferentes a ASP.NET, también es posible desarrollar servicios web con otras tecnologías, es suficiente que éstas entiendan el protocolo SOAP y se encarguen de la gestión de los mensajes XML que se intercambian. Esto permite la interconexión de sistemas que utilizan distintas tecnologías o plataformas, utilizando para ello los servicios web como “lingua franca” en su comunicación.

  23. NETXO dice:

    Hola,

    estoy pensando en hacer un servicio web que pueda ser accedido desde un móvil. En ese caso tendría que añadir algún módulo escrito en WAP? o se intercala WAP en el código C# del servicio WEB?… vaya que tengo un poco de lío con todo esto, creo que algo se me está escapando.

    Si alguien me puede echar una mano…

    Gracias.

  24. piedra dice:

    Hola,
    Necesito correr un sistema hecho en asp.net en visual studio en un servidor linux q tengo q hacer???
    espero y me puedan ayudar.

  25. SuSantidad dice:

    Excelente para alguien que no utilzo, ni sabe programar java

  26. netxo dice:

    Hola,

    estoy programando en mono con c#. He hecho un programa de con variables funciona, pero cuando cambio estas variables por propiedades al ejecutar el programa me da una excepción de “violación de segmento mono –debug (y el path del archivo)” alguien sabe a qué se debe esto?

    gracias y felices fiestas para tod@s!

  27. C.L dice:

    Cuales serian las ventajas que ofrece .net para trabajar con graficos que no proporciona java. Alguien podria aclararmelo.
    Gracias

  28. Marcelo dice:

    Hola a todos, quiero entrar al mundo de mono, estoy trabajando sobre suse 10 y al momento de cargar el mono me sale un error en esta parte

    initialize… Main Windows

    estoy utilizando la ultima version de mono, sinceramente ya no se que mas hacer instale todos los paquetes de mono para suse 10

    Alguien puede ayudarme con esto

  29. Marijose dice:

    Hola a todos, estoy haciendo un proyecto en .NET y necesito crear una grafica y no se como hacerla.
    Si alguien sabe por favor espero que me ayude.
    Muchas Gracias

  30. php-monet dice:

    Hola amigos, quisiera saber como puedo instalar la extension de mono para php, (PHP Mono Extension), ya que me descarge el tar.gz de php.net y me dice que tengo que ejecutar un archivo llamdo buildconf, pero no esta este por ningun lado. alguine me podri ayudar por favor?, saludos.
    pd: tengo suse 10.0 y php 5

  31. netxo dice:

    Hola,
    tengo un programa escrito en c# y quisiera saber qué pasos tengo que seguir para convertirlo a aspx, me podéis decir dónde puedo encontrar esta información?
    gracias!

  32. Alberto dice:

    Hola a todos, en www.monohispano.es tenéis muchas de estas cuestiones resueltas con ayudas y tutoriales. También hay una lista de correo al respecto.

    También he tenido problemas con la instalación de la última versión de mono en SUSE 10

  33. Eduardo dice:

    Esta bien chida esta pagina yo soy alumno de la ut en santa catarina n el area de infomatica me gusta mucho el diseño de paginas en ASP.net nomas me gustaria q en el area de descargas pusieran al alcanse punteros ,iconos nuevos y por que no gif’s con movimiento para mejor desempeño de la informatica y asi contagiarse todos bueno grasias si tienen alguna novedad para la novatada en .NET aganla saber al correo mio
    es lalo_anaid@hotmail.com

  34. Wendy dice:

    Hola!!!
    Pues gracias por leer esto primero que nada. Apenas estoy aprendiendo a usar todo esto de .net y necesito el compilador de C#pero no lo encuentro en Internet ¿Alguien podría ayudarme???
    Gracias!

  35. Patxi dice:

    Hola Wendy, puedes obtener el compilador con el SDK de microsoft si estás en entornos windows, o bajándote Mono si quieres probar con este proyecto opensource, que te funcionará tanto en windows como en linux.

  36. Yami dice:

    Hola. soy Yami, estudio programación y estoy dando PHP y Visual.Net. mi problema es que el Apache simplemente no corre aun cuando le cambie el puerto. Me han dicho que existe un “semaforo” que permite a ambos programas trabajar, pero todavia no me han sabido decir como se llama el programa. Alguno de ustedes conoce cual es el nombre de ese “semaforo”.
    Me gustaría obtener la información pues trabajo ambos lenguajes y no puedo trabajar bien con php por culpa de eso

    Les agradezco de antemano su ayuda

  37. CRAZY dice:

    ola, estuve leyendo sobre mono y me parece muy interesante. Quisiera que me dieran mas informacion sobre mono, cuales son sus utilidades y bueno exactamnete todo lo que puedan enviar a mi correo seria bienvenido…

  38. domitila dice:

    hola mil disculpoas por esta pregunta pero estuve buscando una repuesta a mis preguntas pero no las encontre y quisiera que me ayuden porfa:
    mis preguntas son las sigueintes:
    1¿se puede actualizar un proyecto de visual basic 6.0 en visual basic.net?
    2¿se puede instalar el visual basic.net en un sistema operativo linux?con respecto a esta pregunta solo se que si se puede mediante el proyecto mono pero no se porque o de que modo.
    3¿cuando fue lanzado la primera version del visual estudio.net y con cuantos lenguajes?
    porfavor quisiera que ayeden con estas preguntas se los agradecere bastante..

  39. Jonathan dice:

    Para el que preguntó por el “semaforo” ese programa se llama EasyPHP solo haz una consulta en google y ya esta!

  40. rocio dice:

    interesante…..Falta informacion

  41. Rodrigo dice:

    Hola

    Mi nombre es rodrigo lacalle y tengo el siguiente problema,

    Al cargar una pagina con mono en apche me abre sin problemas pero siempre sean extencion aspx , el problema que la pagina esta entera con extencion asp y esta extencion en ves de abrirla me la trata de descargar.

    Alguien me podria ayudar

  42. Marco dice:

    Hola si alguien le interesa visitar como instalar mono en Fedora 5
    http://marcoachs.blogspot.com/2006/10/instalar-mono-en-fedora-core-5.html

  43. Luiso dice:

    Hola, estoy desarrolando un Web Service en .NET y necesito migrarlo a Mono sobre Linux Red Hat para consumirlo desde PHP. Alguien me puede dar algunos consejos?? Gracias de antemano.

    PD: El foro buenisimo

  44. Patxi dice:

    Pues es muy posible que no tengas que hacer nada, aunque dependerá del servicio web que hayas desarrollado. Si ya tienes hecha la instalación de Mono en Linux, seguramente te valdrá con copiar y pegar el servicio web.

    un saludo

  45. rommel dice:

    Hola, estoy trabajando con Mono, con xsp. Tengo el siguiente problema, creé un proyecto en visualstudio 2005 bastante sencillo, sumar dos números, y el proceso invoca a un dll que se encarga de hacer la suma y retornar el resultado a la página .apsx . Mi problema es que quiero ejecutar ese mismo código en mono, pero no me resulta y creo que el problema es debido a que no puede dar con la librería, pues me arroja este error:

    error CS0246: The type or namespace name “libreria” could not be found. Are you missing using a directive or an assembly reference?

    Agradecería tu ayuda, gracias !!!

  46. Patxi dice:

    Hola rommel, prueba a copiar la librería dentro de la carpeta bin de la aplicación web. Es en esa ruta donde en una aplicación web se buscan por defecto las librerías. Si eso te funciona, luego ya puedes buscar otras alternativas como guardarla en el GAC si la necesitas para más webs.

  47. DANIEL dice:

    hola, podrias publicar esta informacion en un solo archivo para bajarla?

    gracias

  48. Patxi dice:

    Puedes utilizar el botón de versión para imprimir, para obtener una página con todos los contenidos del artículo, incluidos los comentarios. Luego puedes guardar la página como html, pdf o cómo quieras ;)

  49. JAM dice:

    Hola a todos, porfavor necesito que me colaboren explicando que es una plataforma y una tecnologia y hacer un comparativo entre una plataforma java y .net pero como plataformas. Muchas Gracias

  50. gmoreno dice:

    Hola a todos, apenas estoy trabajando en un sistema, que debo realizalo en Asp.net (aspx), en Mono, utilizando c#. he instalado el compilador de mono, y utiliso xsp, como servidor, mi pregunta es: ¿el servidor xsp, compila las paginas aspx, o solo las interpreta?, pregunto esto debido a: que tengo una aplicacion en VS.net con c#, y asp.net, me marca un error, pero esta parte del codigo ya la quite, y me sige marcando el mismo problema….

    agradezco su tiempo y si alguien sabe algo, favor de enviarme un correo, gracias. apenas estoy empezando en el mundo de asp.net

  51. MICKE dice:

    hola Patxi sabes me piden que haga un trabajo todos sobre mono ventajas, y modos de intalarse en diversas plataformas kisiera saber si tienes algunos documentos ke me puedan ayudar a realizarlo poara poder hacer un tutorial te lo agradeceria muchisimo saludos desde tabasco.

  52. ricbric dice:

    Hola:
    me parece muy interesante el articulo. Yo tambien estoy iniciandome en este mundo y como deben saber tengo muchas dudas, por el momento quisiera que trataran de ayudarme con esta:

    si voy a migrar un sitio donde los .aspx estan en una carpeta y los .ascx estan en otra y asi, como resolver los problemas que da mod_mono con los caminos ?

    les agradeceria mucho que alguien me ayudara o me diera alguna idea.Cualquier comentario es valido.
    Si no es mucha molestia quisiera que me escribieran a bricelno@gmail.com

    Muchas gracias a todos

  53. Jose Orozco dice:

    Hola.. to2
    Muy interesante articulo ademas de completo.. me acabo de solucionar dudas de concepto que tenia..

    Una pregunta: La plataforma .net es solo para redes ?.. es decir soy programador y estoy buscando alternativas a VisualBasic, Vfox, las tipicas de siempre.. me encontre son SharpDevelop. que dice que permite programa en C# pero quiero hacer aplicativos normales ,, esta herramienta de programacion me sirve o la orientacion es diferente…

  54. Patxi dice:

    Hola Jose, en efecto, con .NET puedes desarrollar cualquier tipo de aplicativo, desde aplicaciones de escritorio hasta aplicaciones web empresariales. Para ello puedes utilizar multitud de entornos de desarrollo, como Visual Studio, SharpDevelop, o incluso simplemente el editor de notas y el compilador del SDK. Además también puedes programar en diferentes lenguajes, como C#, Visual Basic, Delphi, etc…

Deja un comentario