Alain López Jiménez

martes, 20 de octubre de 2009

Agregar un sitio a IIS7

Mi caso particular:
- SO: Vista Home Premiun

1. Abrimos el IIS7.
2. Agregar Aplicación.


3. Añadir un Alias y seleccionar la ruta de acceso física. En este caso un WebSites de Visual Studio.


4. Probar configuración...


Si le da el aviso como la imagen anterior que "No se puede verificar el acceso a la ruta de acceso (....)"
Lo que tiene que hacer es en el formulario de Agregar Directorio Virtual seleccionar Conectar como... y establecer las credenciales de un usuario con acceso (el administrador por ejemplo). Ver siguiente figura:


5. Examinar.

Puede que le de un "Error de servidor en la aplicación", de tipo Acceso Denegado y número Mensaje de error 401.3.

Para arreglar este error:

1. Editar Permisos

2. Elegir pestaña Seguridad
2.1. Opciones Avanzadas
2.2. Seleccionar Editar en la pestaña Permisos
2.3. Seleccionar Agregar...
2.4. Seleccionar Avanzadas...


2.5 Buscar Ahora
2.5.1 Seleccionar IIS_IUSRS
2.5.2 Aceptar


2.4.1 Aceptar

2.6. Entrada de permisos
2.6.1 Seleccionar Permitir - Control Total

Aceptar todos los formularios.

Volver a examinar y listo.

Saludos :D

Etiquetas: ,

sábado, 9 de mayo de 2009

Cada X-tiempo ejecutar un proceso en una aplicación web.

Esto surgió porque necesito generar automáticamente un archivo xml cada cierto tiempo en una aplicación web. Estuve Googleando y encontré que podía hacerlo con un Application Services. La desventaja de tomar esta solución era que la web se montaría en un Hosting y los administradores no me iban a dejar correr ahí el Application Services :(

Seguí buscando hasta que en el MSDN Social encontré un debate llamado “Proceso automático cada cierto tiempo” en el cual, aunque no estaba la respuesta final se debatía sobre ella, así que cree mi código en base a eso y bingo :)

Lo que haré a continuación será poner la solución que tome a este problema.

Utilice la clase System.Threading.Timer que proporciona un mecanismo para ejecutar métodos en intervalos especificados.

Creando la variable Timer en la función Application_Start del archivo Global.asax garantizamos que cada ves que se reinicie la aplicación se vuelva a settear.

void Application_Start(object sender, EventArgs e){

Application["MyThread"] = new System.Threading.Timer(new System.Threading.TimerCallback(MyActions), null, new TimeSpan(0, 0, 0, 0, 0), new TimeSpan(0, 1, 0, 0, 0));

}

Nota: es importante que asignen a una variable de aplicación (Application["MyThread"]) y no a Timer t = new … porque sino solo se ejecuta el método cuando se inicia la apliacion.

Otro detalle a tener en cuenta es que el reciclado de ASP.NET es frecuente, por lo que si quieren ejecutar el método cada 24 horas puede que nunca pase, para eso lo mejor es que se ejecute mas seguido y guardar la última hora en un archivo, puede ser una base de datos. En mi caso opte por un XML.

La función MyActions la implementé en el Global.asax

private void MyActions(object state){

string basedirectory = AppDomain.CurrentDomain.BaseDirectory;

string config_path = System.IO.Path.Combine(basedirectory, "MyConfig.xml");

System.Xml.Linq.XDocument config = System.Xml.Linq.XDocument.Load(config_path);

TimeSpan diff = DateTime.Now - Convert.ToDateTime(config.Root.Element("last-time").Value);

if (diff.Days>= 1) { … }

}

Debo aclarar que el funcionamiento del servidor no esta disponible en este contexto, por lo que no es posible utilizar:

string config_path = Server.MapPath("MyConfig.xml");

Fin. :p

Etiquetas: , , , ,