You are on page 1of 11

24/09/2014

Visual Studio .NET 2013


(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


10



Figura No. 14.


15. aa

You might also like