miércoles, 20 de octubre de 2010

Servicio Web Básico

1. Crear servicio web

Para la ejecución de este taller se debe contar con el IDE de desarrollo de Visual Studio a partir de la versión 2005, en particular utilizaremos la versión 2008.

a. Crear nuevo proyecto servicio web

Inicialmente abrimos el IDE de desarrollo en la ruta Inicio -> Todos los programas -> Microsoft Visual Studio 2008 -> Microsoft Visual Studio 2008. Una vez que abrimos el IDE se procede a realizar un nuevo proyecto como se puede observar en la ilustración 1.

Ilustración 1. Nuevo Proyecto

Luego elegimos la opción “Aplicación de servicio web de ASP.NET” que se encuentra en los tipos de proyecto llamados Web (Parte izquierda de la pantalla).

Ilustración 2. Nueva aplicación de servicio web de ASP.NET

Por defecto, la aplicación crea un servicio web llamado “Service1.asmx”, con el fin de crear el servicio desde cero vamos a borrar este servicio haciendo clic derecho sobre el servicio y escogemos la opción eliminar.


Ilustración 3. Eliminar servicio por defecto

b. Agregar servicio web

El siguiente paso para la elaboración del servicio web es agregar un elemento de servicio web, hacemos clic derecho sobre el proyecto llamado “ServicioWeb” y elegimos la opción agregar -> Nuevo elemento.
Ilustración 4. Agregar nuevo elemento

Elegimos la plantilla llamada servicio web y la llamamos “ServicioWeb”.

Ilustración 5. Plantilla servicio web

c. Agregar funciones

Una vez tengamos creado nuestro servicio web procedemos a implementar la lógica del servicio haciendo doble clic sobre el elemento “ServicioWeb.asmx”.
Ilustración 6. Visión del proyecto

E implementamos el siguiente código.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using Microsoft.VisualBasic;

namespace ServicioWeb
{
///
/// Descripción breve de ServicioWeb
///
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente.
// [System.Web.Script.Services.ScriptService]
public class ServicioWeb : System.Web.Services.WebService
{

[WebMethod]
public string HelloWorld()
{
return "Hello World";
}

[WebMethod]
public String Fecha()
{
return "La fecha actual es:" +
DateTime.Now.ToShortDateString();
}

[WebMethod]
public String Cuotas(Double prestamo, Double interes)
{
Double pagos = Financial.Pmt((interes / 12) / 100, 36, prestamo,0,0);
return String.Format("{0:c}", Math.Abs(pagos));
}
}
}
d. Publicar

Para poder utilizar el servicio web debemos hacer la publicación del servicio, esto lo logramos ejecutando la aplicación con el botón de iniciar depuración o con la tecla rápida F5.

Ilustración 7. Iniciar depuración

Si realizamos bien los pasos anteriores debemos ver una pantalla similar a la siguiente.

Ilustración 8. Servicio web publicado


2. Crear cliente web

La segunda parte de nuestro proyecto consiste en crear un cliente web para consumir el servicio web anteriormente publicado.

a. Crear proyecto ASP.NET

Ilustración 9. Crear Sitio Web

Nombramos nuestro proyecto ClienteWeb

Ilustración 10. Nombramiento de proyecto web

b. Agregar referencia Web

Verificamos dirección de publicación del servicio web.

Ilustración 11. Dirección de publicación del servicio

Agregamos la referencia web en nuestro proyecto sitio web haciendo clic derecho y agregando referencia web.
Ilustración 12. Agregar referencia web

En el campo dirección URL ingresamos la dirección que buscamos en la ilustración 11.

Ilustración 13. Dirección referencia web

Ilustración 14. Servicio web

c. Diseñamos el formulario

El siguiente paso para realizar nuestra aplicación es hacer la interfaz de usuario, para ingresar los controles en el formulario utilizamos el cuadro de herramientas.

Ilustración 15. Formulario web

d. Insertamos lógica al botón


Para insertar la lógica en el botón hacemos doble clic sobre el mismo e implementamos el siguiente código.
protected void Button1_Click(object sender, EventArgs e)
{
Double valorPresente = Convert.ToDouble(TextBox1.Text);
Double interes = Convert.ToDouble(TextBox2.Text);
try
{
ServicioWeb servicio = new ServicioWeb();
TextBox3.Text = servicio.Cuotas(valorPresente, interes);
}
catch(Exception ex)
{
throw ex;
}
}
e. Publicamos la aplicación

Ejecutamos nuestra aplicación utilizando la tecla rápida F5.

Ilustración 16. Ejecución de aplicación

viernes, 15 de octubre de 2010

Insertar nulos NHibernate

Cuando intentamos persistir un valor de tipo null mediante el ORM de NHibernate para una propiedad DateTime normalmente nos encontramos con que el API no puede guardar dicho valor. A modo de ejemplo si tenemos la clase persona(la única clase que existe en los ejemplos):


public class Persona
{
public Persona(){}

public virtual Guid Id { get; set; }
public virtual String NumeroIdentificacion { get; set; }
public virtual String Nombre{ get; set; }
public virtual DateTime FechaDeNacimiento { get; set; }
}
E intentamos guardarla nos enfrentamos a un error similar a:
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM

Para poder evitar este error debemos asignarle a la propiedad DateTime que pueda ser null(llamada comúmnete como Nullable, esto se logra mediante el operador "?". Así, debemos cambiar nuestra clase a:


public class Persona
{
public Persona(){}

public virtual Guid Id { get; set; }
public virtual String NumeroIdentificacion { get; set; }
public virtual String Nombre{ get; set; }
public virtual DateTime? FechaDeNacimiento { get; set; }
}
Esto solucionaría nuestro problema.

martes, 12 de octubre de 2010

Patron Singleton

El patrón de diseño Singleton crea una única instancia de un objeto

1. Para qué sirve?

Existen muchos objetos que necesita una instancia: threat pools, caches, message boxes, manejadores de registros, objetos que manejan drivers de dispositivos (impresoras, camaras, etc.). Para estos casos crear más de una instancia para el programa puede traer varios problemas además de tener que utilizar una mayor capacidad de computo en el sistema sin que sea necesario.

Veamos unos ejemplos de la utilización del patron en entorno .NET.

Ejemplo 1 C#



public class MiClase
{

public static MiClase miClase = new MiClase();

public static MiClase Instancia
{
get
{
return miClase ;
}
}

private MiClase ()
{

}
}

Ejemplo 2 C#



public class MiClase
{
private static MiClase Instance = null;
static readonly object padlock = new object();

private static void CreateInstance()
{
lock (padlock)
{
if (Instance == null)
{
Instance = new MiClase();
}
}
}

public static Validador GetInstance()
{
if (Instance == null) CreateInstance();
return Instance;
}

private MiClase()
{


}
}