lunes, enero 08, 2007

Servidor web Cassini con .Net 2.0 y en español

A continuacion algunas modificaciones que hice al servidor web cassini, para una presentación en dias pasados.

Sigo en el desarrollo del sistema de consultorio medico, y hace algunos dias me pidio un doctor que le mostrará el avance. Le gusto y me comento si podria instalarlo en su PC cuando ya quedara listo, pero cuando prendio su maquina me di cuenta que tenia instalado Windows XP Home, y desgraciadamente no cuenta con IIS, y tampoco se puede instalar de manera sencilla (despues de muchos hackeos y respaldos con regedit).

Visual Studio 2005 trae una opcion para empaquetar Visual Web Server (Cassini) junto con la aplicacion web. Pero no asi, la version Exp

A traves de Cassini, se puede operar un sitio web en una maquina de XP Home, el problema es que cuando se descarga de asp.net, el archivo compilado es con la version .Net 1.1.

Es asi que me di a la tarea de renovar el servidor con el framework 2.0 y en español.

Primero los requisitos:

  1. Tener instalado Microsoft Visual C# Express Edition, descargable desde la pagina de Microsoft MSDN (http://msdn.microsoft.com).
  2. Obtener una copia de Cassini desde el sitio www.asp.net/Projects/Cassini/Download/

Lo siguiente es descomprimir el archivo cassini.exe. El cual crea una carpeta en c:\cassini

A continuación abrimos Microsoft Visual C# Express Edition (MVC#). Creamos una libreria de clases (Dll).

Importamos a la carpeta properties los siguientes archivos de c:\cassini...

AssemblyInfo.cs
ByteParser.cs
ByteString.cs
Connection.cs
Host.cs
Messages.cs
Request.cs
Server.cs

y el archivo cassini.snk al directorio raiz. Y ademas agregar las referencias de System.Drawing y System.Web.

Debe quedar algo parecido a lo anterior. Guardamos el proyecto en nuestros documentos, y finalmente creamos la solucion (F6), tenemos nuestro archivo cassini.dll en la carpeta \Mis documentos\Visual Studio 2005\Projects\Cassini\Cassini\bin\Release.

Ahora vamos a crear el ejecutable. Cerramos el proyecto cassini y abrimos uno nuevo en esta ocasion tiene que ser una "Aplicacion Windows":

Importamos el archivo CassiniWebServerMain.cs al proyecto e importamos la libreria Cassini.dll, asi como System.Drawing.

Abrimos el archivo y modificamos las siguientes lienas de codigo:

  • appDirLabel.Text = "&Directorio de Aplicacion:"
  • portLabel.Text = "&Puerto del servidor"
  • vrootLabel.Text = "Directorio &Raiz Virtual:"
    browseLabel.Text = "Iniciar la aplicacion web:"
  • startButton.Text = "Iniciar"
  • stopButton.Text = "Detener"
  • ShowError("Directorio de aplicacion invalido");
  • ShowError("Puerto invalido");
  • ShowError("Directorio raiz virtual invalido");
    "Cassini no pudo iniciar en el puerto " + portNumber + ".\r\n" +
    "Posiblemente hay un confilcto con otro servidor web en el mismo puerto.");

El recurso del icono me estuvo dando problemas, como no me interesa el icono, simplemente comente la linea:

  • //Icon = new Icon(Assembly.GetExecutingAssembly().GetManifestResourceStream("CassiniWebServerIcon"));

Creamos el proyecto (F6) y se crea el ejecutable:CassiniWebServer.exe

Podemos copiar este archivo en nuestra aplicacion web:

c:\inetpub\web\expediamedicus

y creamos un acceso con la siguiente modificacion:

"C:\Inetpub\Webs\expediamedicus\CassiniWebServer.exe" C:\Inetpub\Webs\expediamedicus 80

De esta manera podemos arrancar la aplicacion desde la misma carpeta:

Se pueden realizar mas modificaciones de tal manera que solo quede una ventana pequeña con la aplicacion web correspondiente, por ejemplo:

Listo!

2 comentarios:

Anónimo dijo...

Hola. ¿Sabes cómo indicarle otro puerto a cassini? Cuando se lo cambio me dice que posiblemente esté en uso y no es cierto.
Muchas Gracias

vgarcias dijo...

Run the web server using 'CassiniWebServer < physical-path > < port > < virtual-path >'.
For example:
CassiniWebServer c:\ 80 /