Creando Aplicaciones Web Distribuidas con ASP.NET

Consumiendo Web Services

 

Fecha: 15/Ago/2005 (15/Ago/2005)
Autor: Daniel Llanos Meza -- danielthewinner@hotmail.com

 


Introduccion al Tema

Hola Mundo!!!, bueno en primer lugar comentandoles que este es mi primer (y espero que no sea el ultimo) articulo que presento, en mis inicios con ASP.NET, espero que me apoyen calificando este articulo. Bien, como sabemos este mundo esta lleno de cambios y evolucionando constantemente, revolucion que ha llegado tambien a Internet y al futuro paradigma del desarrollo, orientado a la Web, es decir que las aplicaciones sean vistas como un servicio disponible para todos y desde cualquier dispositivo que tenga conexion a Internet, rompiendo barreras y limitaciones, fomentando la integracion entre aplicaciones, y es en donde aparece un agente excluyente denominado XML Web Services, valiendose del XML para integrar plataformas distintas y facilitando la comunicacion entre las mismas y permitir la construccion de Aplicaciones Distribuidas que empleen la funcionalidad implementada en estos Web Services.

Breve Descripcion del proyecto

Mi colaboración esta centrada en la creación y posterior consumo de un Web Service dentro de una aplicacion Web distribuida , en esta oportunidad trabajando con C# .NET, para esto en primer lugar inicialmente construí el Web Service usando la herramienta ASP.NET Web Matrix, no se pero me gusta mucho, si ya se que no tiene intellisense o la ayuda instalada pero tiene la ventaja de que puedes ejecutar tus aplicaciones web sin necesidad de tener instalado el IIS. En si el Proyecto esta constituido por una pagina .ASPX construida en Visual Studio .NET 2003 que mediante una referencia Web consume la funcionalidad del Web Service, que presenta un metodo web que recibe como parametro un query o consulta para una Base de Datos (el backup de la misma esta incluida en el fichero junto con el codigo de la presentacion) y que dicha consulta sera generada en la aplicacion Web antes de ser enviada al Web Service.

Esta Aplicacion Web presenta una pagina ASP.NET que cuando el usuario la visite tendra que ingresar algunos "requisitos" con respecto a la apariencia y perfiles para encontrar asi contactos de su interes, como si fuera un servicio de Busca Parejas... La pagina ASP.NET se encargara de elaborar la consulta que recibirá posteriormente el Web Service, el cual se comunicara con el servidor de Base de Datos (SQL Server 2000) y devolvera un conjunto de registros como resultado de su busqueda.

Comencemos...

1. Construyendo el Web Service

Iniciamos el Microsoft ASP.NET Web Matrix, si no lo tienen instalado, bajen el instalador de la Internet, si no me equivoco la direccion es: http://www.asp.net/webmatrix no pesa mucho, una vez que lo tienen instalado realizar estos pasos:

  1. Verás el cuadro de diálogo New File.
  2. Selecciona (General) de la panel Templates.
  3. Selecciona la plantilla XML Web Service.
  4. Escribe la ruta de acceso del archivo en el cuadro Location.
  5. Escribe CasamenteraWS.asmx en el cuadro Filename.
  6. Seleccione Visual C# en la lista desplegable Language.
  7. Escriba Servicio1 en el cuadro Class.
  8. Escriba MatrixDemo en el cuadro Namespace.
  9. Haga click en OK.  

Codificando el WebMethod Listado con C#

	public class Servicio1 {
	     [WebMethod]
	     public DataSet Listado(string query){
	          string cadena;
		  cadena="Server=(local); uid=sa; pwd=; database=Casamentera";
		  SqlConnection cn = new SqlConnection(cadena);
		  SqlDataAdapter da = new SqlDataAdapter(query, cn);
		  DataSet ds = new DataSet();
		  da.Fill(ds, "ilusos");
		  return ds;
	     }
	}	     

Como les dije, con el ASP.NET Web Matrix ustedes no tendrian inconvenientes de ejecutar su web Service tengan o no instalado el IIS la primera pagina generada por el .NET Framework nos mostrara el metodo Web Listado como veremos en la imagen:

como ejemplo de parametro para una consulta podriamos escribir:

Con esta consulta estamos seleccionando a los registros correspondientes a la tabla ilusos con todos sus campos, que nos mostrara como resultado una página en formato XML con cada uno de los registros y campos convertidos en elementos XML, todo hecho por el NET Framework ... alucinante!!!


2. Construyendo la página .aspx en el Visual Studio .NET 2003

En el Visual Studio creamos un nuevo proyecto en C# con el nombre de CasamenteraWeb y en nuestra pagina agregaremos 4 controles DropDownList, 5 controles RadioButton, un control button, algunos labels y un Datagrid de modo que el diseño de nuestra pagina quede de la siguiente manera, cada uno con el ID correspondiente (como veran soy un desastre diseñando) pero esa es la idea ;)

Con respecto a los RadioButton, en su propiedad GroupName deben tener unas modificaciones, RbtnHombre y RbtnMujer deben tener el valor Sexo o cualquier nombre que identifique que ambos RadioButton pertenecen al mismo grupo y en el momento de la ejecucion de la pagina solo uno de los dos puedan ser seleccionados, lo mismo se hara en el caso de los RadioButtons para la seleccion de la talla que tendra como GroupName = Talla.

Comenzamos escribiendo el código para el evento Page_Load en donde haremos el llenado de los controles DropDownList que hemos ubicado en la pagina:

	private void Page_Load(object sender, System.EventArgs e)
	{
	    if(!Page.IsPostBack)
	    {
		// para llenar el Edad1 y Edad2
		for(int i=18;i<61;i++)
		{
		    Edad1.Items.Add(i.ToString());
		    Edad2.Items.Add(i.ToString());                    
		}
		// para la conexion
		string cad="Server=CCIS114;uid=sa;pwd=;database=Casamentera";
		SqlConnection cn =new SqlConnection(cad);
		cn.Open();
		//para llenar el DDLSigno
		SqlDataReader dr ;
		SqlCommand cmd =new SqlCommand("select distinct signo from ilusos",cn);
		dr=cmd.ExecuteReader();
		DDLSigno.DataSource=dr;
		DDLSigno.DataTextField="signo";
		DDLSigno.DataBind();            
		cn.Close();
		//para llenar el DDLPais
		cn.Open();
		SqlCommand cmdPais=new SqlCommand("Select distinct pais from ilusos",cn);
		dr=cmdPais.ExecuteReader();
		DDLPais.DataSource=dr;
		DDLPais.DataTextField="pais";
		DDLPais.DataBind();
		cn.Close();		
	    }
	}

Ademas hemos creado unas variables a nivel de la aplicacion que trabajen como flags, es decir que me sirvan como indicadores si es que hemos seleccionado algun elemento de cada uno de los DropDownList.


3. Creando la Referencia Web

La Referencia Web nos servirá para que nuestra aplicación Web pueda emplear toda la funcionalidad encapsulada en el Web Service como si este fuera un componente local, a traves de una clase Proxy. Lo primero que debemos de hacer es en el explorador de Soluciones en la seccion referencias, click derecho y seleccionar agregar Referencia Web:

En la caja de texto URL colocamos : http://localhost:8080/CasamenteraWS.asmx ( que es la direccion de nuestra Web Service al ejecutarla en el ASP.NET Web Matrix ) y clickeamos en Ir, que nos presentará los metodos web disponibles de nuestro Web Service, en el nombre de Referencia yo le coloque Servicio, como lo pueden ver aqui:

Clickeamos en Agregar referencia para terminar.


4. Terminando la implementación

Una vez que hemos creado la referencia web, lo que nos queda por hacer es solamente aprovechar la funcionalidad implementada en nuestro Web Service. Para ello nos falta implementar la funcionalidad de nuestro button, que se encargara de recopilar todas las opciones seleccionadas y construir la consulta, y enviarla hacia el webService, quien se encargara de consultar a la base de Datos:

	private void Button1_Click(object sender, System.EventArgs e)
	{
		string pais, signo, query="Select nombres, apellidos, edad, signo, pais, ocupacion,  
          		talla, color_ojos, color_cabello, hobbie, caracteristicas from ilusos where ";
		int menor=18, mayor=60;
		//Verificamos si se selecciono un signo
        	if (flagSigno!=0)
		    Response.Write("Se cambio el indice");

		//verificar el sexo
		if(RbtnHombre.Checked==true)
			query+=" sexo='M' and";
		else
			if(RbtnMujer.Checked==true)
				query+=" sexo='F' and";			
				
		//verificar la edad
		if(flagEdad1==0 && flagEdad2==0)			
		{
			menor=18;
			mayor=60;
		}
		else
		{
			if(flagEdad1!=0)
				menor=int.Parse(Edad1.SelectedItem.Text);				
			if(flagEdad2!=0)
				mayor=int.Parse(Edad2.SelectedItem.Text);
		}

		//verificar el pais
		if(flagPais!=0)
		{
			pais=DDLPais.SelectedItem.Text;
			query+=" pais='"+pais+"' and";
		}						
				
		//verificar el signo
		if(flagSigno!=0)
		{
			signo=DDLSigno.SelectedItem.Text;
			query+=" signo='" + signo + "' and";				
		}

		//verificar la talla
		if(RbtnAlta.Checked)
			query+=" talla>1.80 and";
		else
			if(RbtnMediana.Checked)
				query+=" talla>1.50 and talla<1.80 and";
			else
				if(RbtnBaja.Checked)
					query+=" talla<1.50 and";
					query+=" edad>="+menor.ToString()+" and edad<" +mayor.ToString();
		
		Servicio.Servicio1 ws = new Servicio.Servicio1();
		DataGrid1.DataSource=ws.Listado(query);
		DataGrid1.DataBind();			
	}

El resto del codigo correspondiente a la manera de trabajar con las variables tipo flag estan el fichero con el codigo junto con el backup de la Base de Datos, ya que la parte principal del codigo ha sido explicada. Una vez que se ha seleccionado las opciones de busqueda se mostraran en el DataGrid los resultados de la busqueda.


Conclusiones

Bueno con este aporte he tratado de plasmar de alguna manera como crear y consumir un Web Service no solo utilizando el Visual Studio 2003 sino que empleando el ASP.NET Web Matrix para la creación del Web Service, ademas se pueden emplear web services que se encuentran disponibles en la Web y utilizarlos como si fueran un componente local dentro de su aplicacion... Bueno espero que este artículo sea de su agrado. No olviden calificarlo. y cualquier comentario o algun tema para futuros articulos, a mi correo electronico. Gracias


Espacios de nombres usados en el código de este artículo:

System.Data
System.Data.SqlClient
System.Web.Services


Fichero con el código de ejemplo: Daniel_AplicacionesDistribuidas.zip - 235 KB


ir al índice del Guille