Saltar al contenido
Menú
El blog de Kañaz
  • Inicio
  • Acerca de
  • Github
  • Youtube
  • LinkedIn
  • Twitter
El blog de Kañaz

Subir archivos a un servidor utilizando Silverlight 5

Publicada el 27 marzo, 201216 julio, 2012
Twittear

Una funcionalidad básica que podemos encontrar en muchas aplicaciones para guardar y consultar archivos o simplemente para actualizarla es la carga de archivos al servidor. Hacerlo es realmente muy sencillo si encontramos la forma adecuada de hacerlo. Una mención importante es que utilizaremos al igual que muchísimos tutoriales un manejador genérico que tiene la extensión .ashx, la diferencia es que prácticamente ninguno te explica como poder hacerlo de modo productivo, así que primero debemos comenzar por establecer nuestro ambiente.

Para comenzar dirígete a la carpeta de tu servidor web IIS (C:\inetpub\wwwroot) y crea ahí una nueva carpeta, con el nombre que desees, después ve a la administración de tu sistema (Presiona Win+R y escribe compmgmt.msc), en el explorador de tu IIS, deberás poder ver la carpeta que acabas de crear.

 

Da clic derecho sobre ella y selecciona “Convertir en aplicación”.

Aplicacion

Al hacer esto, el ícono de tu carpeta habrá cambiado de modo que te indica que ya tienes una aplicación web disponible.

Ahora vamos a crear la solución cliente que será la que el usuario vea y para hacerlo, deberemos comenzar por crear una aplicación Silverlight, ya con la solución recién creada agrega una carpeta en el proyecto de tu sitio web, de la siguiente forma.

Imagen1

En el folder de recursos, da clic derecho y en selecciona “Add a new item”, en el cuadro de diálogo que aparece escoge un manejador genérico.

Manejador generico

Al momento de crear el manejador, deberás ver una pantalla similar a esta.

Generic handler

Y aquí inserta el siguiente código.

[sourcecode lang=’csharp’]<%@ WebHandler Language="C#" Class="Manejador" %>
using System;
using System.Web;
using System.IO;

public class Receptor : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string nombreArchivo = context.Request.QueryString[«nombreArchivo»].ToString();

using (FileStream stream = File.Create(context.Server.MapPath(«~/Datos/» + nombreArchivo)))
{
GuardarArchivo(context.Request.InputStream, stream);
}
}

private void GuardarArchivo(Stream stream, FileStream streamArchivo)
{
byte[] buffer = new byte[4096];
int bytesLeidos;
while ((bytesLeidos = stream.Read(buffer, 0, buffer.Length)) !=0)
{
streamArchivo.Write(buffer, 0, bytesLeidos);
}
}

public bool IsReusable
{
get { return false; }
}
}[/sourcecode]

El manejador genérico te permite poder ejecutar tareas complementarias de tipo ASP, en este caso por medio de la clase tienes dos métodos y una propiedad creados, el primer método es público y es el que mas adelante utilizarás desde tu cliente, el segundo método es privado y te sirve de apoyo para el primero, lo que hace es descomponer el archivo recibido en bytes y darles la secuencia correcta para “rearmar” tu archivo en el servidor. Por último una propiedad booleana, en este caso no la utilizarás para nada, pero es necesaria por el tipo de clase manejada, así que no la puedes eliminar.

Compila tu aplicación y con el menú contextual en el proyecto de inicio, usa el explorador de Windows para ver los archivos de tu proyecto. Y ya desde el explorador, copia el archivo que acabas de crear en la carpeta que ya tienes en tu IIS, además en la misma carpeta, crea un folder que se llame Datos.

IIS

 

Si tienes curiosidad en como se puede ver tu aplicación web en el explorador te toparás con un error, el cual para nuestros fines esta bien, dado que te estará indicando que necesita un parámetro por recibir.

Error IIS

Ya con toda esta configuración, regresa a tu solución Silverlight y en esta solución, en tu XAML, crea una interfaz que te quede de la siguiente forma.

[sourcecode lang=’xml’]



1 comentario en «Subir archivos a un servidor utilizando Silverlight 5»

  1. Uziel Mercado dice:
    23 septiembre, 2014 a las 9:55 pm

    Estoy intentando realizar tu ejemplo me parece muy bueno aunque tengo un error como el siguiente:
    timeouts are not supported on this stream. silverlight

    A que se deberá, que podré estar haciendo mal ?

    Gracias.

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Busca en este sitio

MI perfil de Github

Github profile

Sígueme en Twitter

Seguir a @aminespinoza
©2023 El blog de Kañaz | Funciona con SuperbThemes y WordPress