Monday, February 12, 2007

Debe tener la sgte estructura



Se obtendra los sgtes resultados.


  1. al cargar, muestra categorías



  1. al presionar el boton padre hijo, se vera el detalle de cada categoría.



help, como hago para subir la solucion, alguno podria ayudarme con un host para archivos.

cualquier cosa me escribe, a ealvinoq@gmail.com

thkns



Web Services

Web Services
(Fundamentos)



  1. Introducción:


Se mostrara cuan fácil es crear un Servicio Web.

Lo fácil que es reusar una aplicación .Net, y mover la lógica de negocio a un Web Service, estando así disponible para otras aplicaciones.

Tendremos dos ejemplos, el primero, que se encarga de recolectar la información de pago, y el segundo, que se encarga de enviar y recibir archivos, siendo representados los archivos binarios dentro de un tipo complejo.

Se resolverán algunos casos, los cuales se harán paso a paso, ya que aprenderemos haciendo.


  1. Ejemplos:



    1. Sencilla aplicación comercial



  1. Crear una interfaz de la siguiente manera.





  1. Crear un servicio web con la sgte estructura:





  1. Escribir el siguiente método en al Archivo code-behind TarjetaCredito.cs:


[WebMethod(Description = "Este método se encarga de validar el nro de tarjeta de crédito")]
public bool validarTarjeta(String nroTarjeta, DateTime fchaVcto)
{

if (fchaVcto >= DateTime.Today)
{
int total = 0;
int temp = 0;
char[] ccDigitos = nroTarjeta.ToCharArray();

for (int i = 0; i < nroTarjeta.Length; i++)
{
if (((i + 1) % 2) == 0)
{
total += int.Parse(ccDigitos[i].ToString());
}
else
{
temp = int.Parse(ccDigitos[i].ToString()) * 2;
if (temp > 9)
{
temp = (int)temp - 9;
}
total += temp;
}

}

if ((total % 10) == 0)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}

}


  1. El atributo Description de la directa [WebMethod], permitira lo siguiente:





  1. Agregar la referencia Web.





  1. Agregar la declaración:





  1. Programar el evento click del boton Colocar orden.


protected void btncolord_Click(object sender, EventArgs e)
{
TarjetaCredito o_tc = new TarjetaCredito();

if (o_tc.validarTarjeta(txtnrotarjeta.Text, cldfecha.SelectedDate))
{
lblstatus.Text = "Gracias por su orden.";
}
else
{
lblstatus.Text = "Tarjeta de crédito invalida";
}

}



    1. Aplicación para el intercambio de archivos.



  1. Crear el siguiente esquema para el servicio Web.





  1. En el archivo Code-Behind DirectorioWeb agregar los siguientes namespaces y los WebMethods.





Crear el siguiente estructura, va por encima de la declaración de la propiedad de WebService.



[WebMethod]
public string[] ListarArchivos()
{
return Directory.GetFiles("d:\Publica");
}

[WebMethod (Description = "Permite al cliente solicitar un archivo.")]
public ArchivoWeb ObtenerArchivo(string nombreArchivo)
{
ArchivoWeb archivoWeb = new ArchivoWeb();
string rutaArchivo = "d:\Publica\" + nombreArchivo;

//establecer el nombre del archivo
archivoWeb.Nombre = nombreArchivo;

//obtener el contenido del archivo solicitado


Stream s = File.Open(rutaArchivo, FileMode.Open,FileAccess.Read);
archivoWeb.contenido = new byte[s.Length];
s.Read(archivoWeb.contenido, 0, (int)s.Length);
s.Close();

//obtener los sellos de fechas para el archivo
archivoWeb.FchaCreacion = File.GetCreationTime(rutaArchivo);
archivoWeb.FchaUltAcceso = File.GetLastAccessTime(rutaArchivo);
archivoWeb.FchaUltEscritura = File.GetLastWriteTime(rutaArchivo);

return archivoWeb;
}


  1. Agregar un nuevo proyecto, “Console Application”, y que tenga la siguiente estructura:





  1. Agregar la siguiente Referencia Web al servicio Web definido anteriormente:




  1. Implementar los siguiente metodos:

static int Main(string[] args)
{
//validar el numero de los argumentos de comando de linea
if (args.Length < 1 || args.Length > 3)
{
MostrarUso();
return 1;
}

//inicializar variables
string origen = args[1];
string destino = origen;

if (args.Length == 3)
{
destino = args[2];
}

//Procesar los comandos que fueron pasados
switch (args[0].ToUpper())
{
case "DIR":
ListarArchivos();
break;
case "GET":
obtenerArchivo(origen, destino);
break;
default:
MostrarUso();
break;

}

return 0;

}


private static void ListarArchivos() {
DirectorioWeb dirWeb = new DirectorioWeb();
string[] archivos;

archivos = dirWeb.ListarArchivos();

foreach (string archivo in archivos)
{
Console.WriteLine(archivo);
}

Console.WriteLine("n{0} archivo(s) en el directorio.", archivos.Length);

}

private static void obtenerArchivo(string origen,string destino) {
DirectorioWeb dirWeb = new DirectorioWeb();
ArchivoWeb archWeb = new ArchivoWeb();

//traer el archivo solicitado y guardarlo en el disco
archWeb = dirWeb.ObtenerArchivo(origen);

//guardo el archivo web requerido y lo copio a mi sistema
//de archivos
FileStream fs = File.OpenWrite(destino);
fs.Write(archWeb.contenido, 0, archWeb.contenido.Length);
fs.Close();

//establecer el sello de fecha y tiempo para el archivo
File.SetCreationTime(destino, archWeb.FchaCreacion);
File.SetLastAccessTime(destino, archWeb.FchaUltAcceso);
File.SetLastWriteTime(destino, archWeb.FchaUltEscritura);

}


private static void MostrarUso()
{
Console.WriteLine("Se usa el ArchivoWeb para traer archivos"+
"desde el servicio web directorioWeb.");
Console.WriteLine("nUso: Origen de comando archivoWeb [destination]");
Console.WriteLine("tComando - DIR o GET");
Console.WriteLine("tOrigen - El nombre del archivo a "+
"traer");
Console.WriteLine("tDestino - Opcionalmente el nombre de el"+
" archivo de destino.");
Console.WriteLine("nEjemplos");
Console.WriteLine("tArchivoWeb obtiene algun archivo.exe");
Console.WriteLine("tArchivoWeb obtiene algun archivo.exe c:temp");
Console.WriteLine("tArchivoWeb obtiene algun archivo.exe c:\temp\myfile.exe");

}



  1. Utilizándolo:



    1. Ir a la siguiente ruta:





    1. Abrir una consola, y ejecutar el .exe que se encuentra en la carpeta debug.





    1. En la siguiente consola, escribir la ruta y pasarle los parámetros requeridos.


Antes del copiado(copiaremos hola.txt).



Escribir el siguiente comando:



El archivo fue copiado satisfactoriamente:

























Bibliografía

Libro Building XML Web Services for the Microsoft .Net Platform.
Capitulo 2 – Creating a Basic Web Service.