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()
{


}
}

sábado, 28 de noviembre de 2009

Configuración del Path y Classpath de JAVA en Windows Vista

Uno de los inconvenientes más comunes que tenemos al intentar correr una aplicación java sin utilizar un editor como NetBeans o Eclipse, es la compilación y ejecución de la aplicación. Si estás haciendo la compilación mediante javac te aparecerá un error como este:

Para poder hacer la compilación de los archivos es necesario configurar las rutas del Path y del Classpath, en los siguientes pasos se muestra como hacerlo:
  1. Click derecho en mi PC y elige la opción propiedades.
  2. Configuración avanzada del sistema

  3. Variables del entorno
  4. Busca la variable llamada Path
  5. Click en editar
  6. Avanza hasta el final de las variables que esten declaradas y coloca la ruta donde se encuentra la carpeta bin de la instalación de Java separada por ";", para mi caso es "C:\Program Files\Java\jdk1.6.0_14\bin".

  7. Luego configuramos la variable ClassPath, si no se encuentra en el sistema la puedes crear con el nombre CLASSPATH y le asignamos el valor "." (Punto). Si ya se encuentra en el sistema ve al final y agregala con un ";" .

  8. Si todo ha salido bien debe mostarte un menú como el siguiente al ejecutar el comando de compilación javac.

domingo, 18 de octubre de 2009

Herencia y extensión de clase

Una de las funciones más destacadas de la POO es la herencia, un mecanismo que defien nuevos objetos con base en los existentes. Java la soporta con extensión de clase, definiendo una nueva clase con base en otra ya existente sin modificarla. A la primera se le llama subclase o clase extendida, recibe a los miembros de una superclasey agrega otros de su propiedad. Aunque es posible que la herede dado el surgimiento de jerarquías.

Java soporta herencia sencilla a través de extensión de clase. En este tipo de herencia una clase se extiende a partir de una sola superclase. Algunos lenguajes POO, como C++, soportan herencia múltiple porque una subclase puede tener varias superclases. Al anular la herencia múltiple, Java evita las dificultades y complicaciones relacionadas con este tipo de herencia. Además, si una clase se designa final no puede extenderse. El uso experto de la herencia a través de subclases contribuye en gran medida a un programa OO bien diseñado.

viernes, 16 de octubre de 2009

Miembros de instancia y estáticos

Un miembro de una clase lo es de instancia o de toda la clase. Será de instancia a menos que se declare static, lo que lo hace de toda la clase. Un campo o método de caso se agrega a un objeto anfitrión y sólo se tiene acceso a él a través del anfitrión. Por ejemplo, si tenemos una clase que gestiona cuentas bancarias, el objeto manuel.balance() devuelve el saldo del objeto manuel de la clase Cuenta. Dentro de un método de instancia se hace referencia al objeto anfitrión a través de la palabra clave this. En balance, el código return(balance_cuenta) es una abreviación de return(this.balance_cuenta). Por tanto, los miembros de instancia viven dentro de su objeto anfitrión y es posible accesarlos libre y directamente dentro del anfitrión.

Los miembros de instancia juegan un papel importante en la programación orientada a objetos. Pero a veces un atributo o una operación debe trascender los límites de los objetos individuales. Una cuota de servicio mensual puede ser parte de la clase Cuenta, pero no se restringe a cualquier objeto Cuenta individual. Un miembro de toda la clase es único y existe independientemente de cualquier instancia (objeto). Por tanto, es posible utilizar un campo de toda la clase para compartir información entre todos los objetos. En Java, los miembros de toda la clase se declaran static y a menudo se les conoce simplemente como miembros estáticos, los cuales están encerrados en el alcance de su clase, pero no tienen objeto anfitrión. Un miembro estático esta bajo el mismo control de acceso que cualquier otro miembro.

Declare un método static cuando sea un procedimiento que funciona de manera independiente de cualquier objeto de la clase. Un método estático no tiene objeto anfitrión y, por tanto, no tiene acceso a this, ni explícita ni implícitamente. Por tanto, no puede hacer referencia directa a ningún miembro de instancia (no estático). El método de entrada main de una clase se declara static.
Es posible tener acceso a un miembro estático a través de cualquier objeto de la clase. Desde luego, se llega al mismo objeto estático sin importar cuál instancia de la clase utilice. También se puede tener acceso directo a ese miembro con la notación:

NombreClase.NombreMiembroestático


Cuando una clase sólo tiene miembros estáticos y no miembros de instancia, ésta no está destinada a establecer objetos. Se convierte en un conjunto de métodos, campos o de ambos, encerrados en una alcance de clase.

Inicio

Aprendiendo