(C#) Lab. 3 Utilizando Windows Communication Foundation en ASP .NET!
Prof. Enrique Gmez Jimnez Prof. Enrique Gmez Jimnez
1
Visual Studio .NET 2013 (C#) Lab. 3 Utilizando Windows Communication Foundation en ASP .NET! Windows Communication Foundation es definido por Microsoft como: Windows Communication Foundation (WCF) es un marco de trabajo para la creacin de aplicaciones orientadas a servicios. Con WCF, es posible enviar datos como mensajes asincrnicos de un extremo de servicio a otro. Un extremo de servicio puede formar parte de un servicio disponible continuamente hospedado por IIS, o puede ser un servicio hospedado en una aplicacin. Un extremo puede ser un cliente de un servicio que solicita datos de un extremo de servicio. Los mensajes pueden ser tan simples como un carcter o una palabra que se enva como XML, o tan complejos como una secuencia de datos binarios. Recuperado el 26 de setiembre, 2014 desde: http://msdn.microsoft.com/es-es/library/ms731082(v=vs.110).aspx Con ello en mente vamos a crear una aplicacin sencilla que permita conocer la funcionalidad e implementacin de un WCF, utilizando programacin en capas. Paso No. 1: Creando la base de datos. Como primer paso vamos a crear una base de datos en SQL Server, versin 2012. No entraremos en detalle por tanto se describe en el Lab. No. 2 de esta serie de ejemplos de laboratorio. El modelo relacional de esta base de datos (AgenciaTurismo) se muestra en la figura No. 1.
Figura No. 1 Prof. Enrique Gmez Jimnez
2
Creacin del WCF. A continuacin procederemos a crear nuestro WCF. Para ello realice los siguientes pasos: 1. Abra Visual Studio .NET y cree un nuevo proyecto tipo Biblioteca de Servicios WCF de nombre WCFemp, tal como se muestra en la figura No. 2.
Figura No. 2
El directorio donde se alojar este proyecto debe ser C:\AgenciaTurismo\WCFepm\ Una vez que pulsemos el botn Aceptar se nos crear el WCF. Los archivos que se muestran en la figura 3. Cambie los nombres de esos archivos tal como se muestra en dicha figura.
Figura No. 3
En la figura 3 se crean dos objetos importantes. IService y Service. El primero establece la interface del WCF y el segundo la implementacin de dicha interface. Aqu radicar la lgica de la aplicacin. Prof. Enrique Gmez Jimnez
3
2. Procedamos abriendo el archivo IServiceEPM que establece la interface del WCF y sustituyamos su cdigo por el mostrado en el listado 1. using System.ServiceModel; using System.Text; namespace WCFepm { [ServiceContract] public interface IServiceEPM { [OperationContract] bool validarUsuario(string usuario, string clave);
[OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); } [DataContract] public class CompositeType { bool boolValue = true; string stringValue = "Hello ";
[DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } }
[DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } } } Listado No. 1 La seccin sombreada en realidad es lo nico que implementaremos en esta interface. Constituye un mtodo que retornar un valor lgico (boolean) luego de recibir dos parmetros. 3. Guardemos este archivo de interface. 4. A continuacin dejaremos esta capa de lgica de negocios para implementar la lgica de datos requerida por nuestro ejemplo. Procedamos agregando un nuevo proyecto Biblioteca de clase llamado CADemp (C de clase, A de acceso y D de datos). La figura No. 4 muestra este procedimiento.
El directorio donde almacenaremos esta biblioteca de clase ser: C:\AgenciaTurismo\CADepm\
Prof. Enrique Gmez Jimnez
4
Figura No. 4
5. Una vez que pulsemos el botn Aceptar agreguemos un elemento conjunto de datos o dataset, tal como se muestra en la figura No. 5. Nmbrelo DSemp.
Figura No. 5 Prof. Enrique Gmez Jimnez
5
Se nos presentar el editor del Dataset. En este editor arrastremos la tabla Miembros hacia el editor, tal como se muestra en la figura No. 6. Posteriormente, pulse sobre el ttulo de la tabla y seleccionemos la opcin Agregar Consulta.
Figura No. 6
La consulta que disearemos aqu ser de tipo Select que devuelve un solo valor. El texto de la consulta ser: Select (1) From Miembros Where IdMiembro=@IdMiembro AND Clave = @Clave. Esta consulta deber llamarse validarUsuario. Nuestro dataset quedar configurado tal como se muestra en la figura No. 7.
Figura No. 7
Estando en el proyecto CADemp observemos que existe una clase nombrada automticamente como class1. Renombremos esta clase como cadMiembro. Abramos la clase y escribamos el cdigo mostrado en el listado No. 2.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using CADepm.DSepmTableAdapters; //referenciado desde el dataset. using System.Threading.Tasks;
Prof. Enrique Gmez Jimnez
6
namespace CADepm { public class cadMiembro { private static MiembrosTableAdapter adaptador = new MiembrosTableAdapter(); public static bool validarUsuario(string usuario, string clave) { return adaptador.validarUsuario(usuario, clave) == 1; //debemos igualarlo a 1 porque SQL Server no devuelve boolean.
} } } Listado No. 2
Dejamos aqu nuestra clase de acceso a datos, para avocarnos a terminar la lgica de negocios que consumir a esta clase.
6. Antes de utilizar la clase CADepm debemos establecer en el servicio una referencia a la misma, tal como se muestra en la figura 8. Observemos en esa figura que la clase es referenciada en la misma solucin.
Figura No. 8
Ahora si podemos utilizar la clase (del listado No. 2) para ser consumida por el WCF. Este WCF ahora nos aparecer con la referencia, tal como se muestra en la figura No. 9.
Figura No. 9 Prof. Enrique Gmez Jimnez
7
7. Abramos el archivo ServiceEPM y procedamos a sustituir el cdigo que contiene por el mostrado en el listado No. 3. Solo lo que aparece en sombreado es lo que cambia. using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text;
namespace WCFepm { public class ServiceEPM : IServiceEPM { public bool validarUsuario(string usuario, string clave) { return CADepm.cadMiembro.validarUsuario(usuario, clave); }
public CompositeType GetDataUsingDataContract(CompositeType composite) { if (composite == null) { throw new ArgumentNullException("composite"); } if (composite.BoolValue) { composite.StringValue += "Suffix"; } return composite; } } } Listado No. 3 Como podemos ver en el listado, el fragmento de cdigo en oscuro es la implementacin del mtodo declarado en la interface del WCF (ver listado No. 1). Lo que hace prcticamente es consumir la clase CADemp que contiene el DataSet que genera la operacin hacia la base de datos. Creacin de la interface web que consumir el WCF. A continuacin crearemos la interface que consumir nuestro WCF. Para ello sigamos los siguientes pasos: 8. Agreguemos un nuevo proyecto a nuestra solucin. Llammosla webAgenciaTurismo. Ser un proyecto vaco ASP .NET desarrollado con Visual C#. Solo contendr el archivo web.config. 9. Agregue un objeto Login, tal como se muestra en la figura No. 10.
Prof. Enrique Gmez Jimnez
8
Figura No. 10
10. Antes de programar nuestra interface debemos agregar la referencia al WCF como un servicio. Para ello, ubica el archivo de configuracin app.config del WCF y busca la seccin baseAddresses para determinar el puerto y el archivo de ejecucin. Copiemos esa ruta, la cual ser: http://localhost:8733/Design_Time_Addresses/WCFepm/Service1/ Observa la figura No. 11.
Figura No. 11
11. A continuacin vamos a agregar una referencia como servicio a este WCF. Para ello seleccionemos Agregar, Referencia de servicio desde nuestro sitio Web ASP .NET. Observemos la figura No. 12.
Figura No. 11 Prof. Enrique Gmez Jimnez
9
12. Nos aparecer una pantalla donde debemos copiar la direccin que obtuvimos en el paso 10 y ponerle un nombre a esta referencia, tal y como se muestra en la figura 12.
Figura No. 12.
13. Ahora que tenemos el servicio referenciado (lo podemos ver en la figura No. 13) vamos a programar su consumo en esta interface.
Figura No. 13.
14. El cdigo en este formulario ser el mostrado en el listado No. 4. protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) { validarUsuario.ServiceEPMClient servicio = new validarUsuario.ServiceEPMClient(); if (servicio.validarUsuario(Login1.UserName, Login1.Password) == false) mensaje("Cliente no existe!"); else mensaje("cliente encontrado!!!"); }
Observemos como se utiliza validarUsuario que es el nombre de la referencia al WCF y ServiceEMPClient que bsicamente es una implementacin de la funcionalidad del WCF. Si ejecutamos ahora nuestro sitio web, se nos mostrar una imagen como la figura No. 14. Prof. Enrique Gmez Jimnez