jueves, 25 de marzo de 2010

problemas al acceder a las URL de acceso a archivos en aplicaciones de ASPX.NET

Estuve realizando una aplicación web en donde necesite acceder a una imagen y borrarla con su url utilizando System.IO,

especificamente lo que hace el sistema es insertar imagenes y si no me gusta pues la busca, cargo la nueva y borro la actual, es un procedimiento muy simple pero de gran ayuda para manipulación de images, en la mayoria de ejemplos del MSDN nos da esta sentencia para ejecutar la eliminación de la imagen o cualquier tipo de archivo:

if (System.IO.File.Exists(@"c:/user/app_web/images/file1.jpg"))
{
aqui van el procedimiento de eliminación
}

pero que es lo que sucede que nosostros almacenamos las images con la siguiente url:

"~/images/file1.jpg"

y para mostrar la imagen lo único que hacemos es bajamos de la búsqueda esta dirección y la cargamos de esta forma:
images.ImageUrl = _clase_intanciada.constructor.url_image, que equivale a "~/images/file1.jpg" y se carga sin problema nuestra imagen.

el problema lo encontre cuando bajaba esta url y la aplicaba en la sentencia para eliminar la imagen:


//bajamos la variable del url de memoria
url_delete = viewstate["url_image"].toString();

//procedimiento para eliminar
if (System.IO.File.Exists(@url_delte))
{
try
{
}
catch
{
}
}

entonces este procedimiento me daba un error, me saltaba y haciendole un seguimiento con un punto de quiebre me di cuenta que el error decia "No se encuentra la dirección ~/images/file1.jpg".

Al final me di con la respuesta y descubri que existe una directiva que permite instanciar la ruta del servidor y convierte nuestra dirección de tipo "~" en la ruta exacta donde esta publicada nuestra aplicación o proyecto.

La directiva se declara de esta forma
String nombre_cualquiera = Server.MapPath("~/images/file1.jpg");

El ejemplo resuelto queda de esta forma

//declaramos la directiva
string rootpath = server.MapPath(url_delete)

//proceso de eliminación
if (System.IO.File.Exists(@rootpath))
{
}

Listo espero que hayas entendido este ejemplo práctico para acceder a los archivos almacenados en ficheros en el servidor, aplicacion web.

fileUpload no funciona con updatepanel ASPX.NET

A quien no le ah pasado que mientras desarrollamos una aplicación web en ASPX.NET nos toca, subir un archivo, imagen, etc... existen muchas maneras de hacerlo pero la forma base es utilizando un fileupload que viene en las herramientas de Visual Studio Team System en app WEB.

Hasta aqui no tenemos mayor problema, el codigo para mover la imagen, archivo se basa en una libreria llamada System.IO la cual copia el file en un directorio en el servidor o en el caso antes de ser publicado, dentro de una carpeta en nuestro proyecto.

el problema inicia cuando usamos una master page con un script manager, es decir que nuestras aplicaciones se ejecutan con scripts, y ya en forma mas profesional usamos los updatepanels para evitar que se actualice cada vez nuestra página web cuando realizamos cambios como seleccionar otros valores de un dropdownlist, en fin.

en la captura podemos ver el codigo como se implementa la utilización de un fileupload dentro del update panel

ahora que sucede seleccionamos un archivo, le damos cargar y nos devuelve un error diciendo "Instancia hace referencia a un objeto no establecido" u otros mensajes dependiendiendo del tipo de método de subida estemos usando.

La respuesta a este problema es que los UPDATEPANEL's no permiten que el fileupload cargue el archivo, ya que para realizar esta acción se necesita hacer un refrescamiento de la página para copiar el archivo en el servidor.

Navegando por internet me enconte con muchas soluciones pero la mayoria no servia, pues enconte algo muy util y que funciona 100% en mi aplicación.

Lo que debeis hacer es colocar una exepción dentro de un trigger con el nombre del boton que esta ejecutando el proceso de subida, en donde obligamos al updatepanel a realizar un refrescamiento solo en la zona de upload sin afectar a los demás registros que esten antes o después del FILEUPLOAD.

El ejemplo implementado lo podes mirar en la captura a continuación.

Espero que tu puedas resolver este problema que a mi me toco vivir, y ahora ya sabemos como arreglarlo...

lunes, 1 de marzo de 2010

Experiencias con Windows Server 2008 R2

Bienvenidos a otro aporte más de .NET Geek's Microsoft en esta oportunidad les voy a hablar acerca de mi experiencia al momento de preparar un Servidor de aplicaciones con IIS 7 de Windows Server 20008 R2 en donde debia instalar SQL Server 2008 x64 y Visual Studio 2008 Team System x64 para publicar mis proyectos realizados en ASPX.

Requerimientos para un correcto funcionamiento de Windows Server 2008 R2:

  • 45GB de disco duro disponible
  • 4 GB de memoria RAM
  • Procesador core 2 duo x64

Ahora les explico el por que de cada requerimiento.

->>Se recomienda 45GB de Disco duro por que el instalador de Windows Server 2008 R2 pesa 4GB pero al momento de instalar y levantar todas las características y funciones ocupa 13GB y el uso del micro es de 650mb.

->>Usamos 4GB de RAM para poder activar el Tema de Windows 7 en donde se aplican transparencia y para el mejor rendimiento de nuestro servidor ya que manejos x64 bits.

->>El procesador debe ser con soporte x64 por razones ya mencionadas de la arquitectura de Windows Server 2008 R2.

Características nuevas en Windows Server 2008 R2:

  • Tenemos con en Windows 7 Aero Shaker para minimizar aplicaciones o maximizarlas
  • Manejamos transparencias y temas básicos y otros de alta resolución
  • Vista en miniatura de las ventanas abiertas
  • Posibilidad de maximizar las ventanas con tan solo arrastrarlas a la parte superior
  • en resumen es 90% similar a Windows 7 ultimate, Enterprise o Professional

una instalado como debe ser de conocimiento debemos levantar las funciones y carácterísticas para mi caso las primordiales fueron IIS 7 y Framework 3.5 x64 para poder instalar visual Studio 2008 Team System.

->> para los que tenemos procesador AMD Turion X2 64, debemos instalar el driver del controlador del micro debido a que tiende a recalentarse en mi caso la notebook, y no se instala SQL Server 2008. Una vez realizado lo anterior procedemos a instalar Visual Studio 2008 Team System. Insertamos el DVD de instalación de Visual Studio 2008 y como tiene soporte para x86 y x64 instala automaticamente la versión de 64 bits por que identifica que se esta usando Framework 3.5 x64, y todos los componentes que se instalan se van bajo esa arquitectura.

Cabe destacar que tiene un convertidor de app de x82 a x64 bits.

Después de instalar correctamente Visual Studio es requisito indispensable ahora instalar el Service Pack 1 de Visual Studio 2008 caso contrario no podremos instalar SQL Server 2008.


finalmente pero no menos importante vamos a instalar SQL Server 2008 x64 para eso debemos descargar la versión completa de MSDNAA que viene consigo soporte para 64 bits.

->>Antes de instalar debemos verificar los requisitos minimos, si todos son correctos pues no tendremos problemas durante la instalación, de alli es cuestión de seguir el asistente, seleccionar las características a instalarse y esperar que se realice de forma correcta.

->>finalmente debemos habilitar la autentificación por usuario en SQL server 2008, configurar el modo TCP/IP, detener el motor y volverlo a ejecutar y ya esta listo nuestro servidor con Visual Studio 2008 Team System y SQL Server 2008