En el siguiente apartado pretendo implementar y demostrar que tipos de proyectos hay que agregar a
nuestra solución para poder desarrollar servicios WCF y luego consumirlos desde
una aplicación MVC que implementaré en la fase IV, ya que en la fase III
publicaremos nuestro servicios en el IIS.
Los requisitos por ahora para
este apartado son:
- IDE – Visual Studio 2010.
- SQL Sever 2008.
- EnterpriseLibrary.
Antes de iniciar con la implementación, comenzaré con la identificación
y creación de los tipos de proyectos que utilizaré.
En nuestra solución agregaré 2 proyectos de tipo biblioteca de clases y 2 de WCF una de biblioteca o clases de servicios WCF y
otra de aplicación de servicios WCF,
así como existe biblioteca de clases comunes o genéricas (las 2 primeras
mencionadas) por así mencionarlos, son las que más se suele usar al desarrollar proyectos
en 3 o N capas o dependiendo de las necesidades del desarrollo, también existe
para WCF con la diferencia que son para servicios,
en lo cual te adiciona un archivo de configuración (App.config se adiciona de manera automática
al crear el proyecto - biblioteca de clases de servicios WCF), entre otros
detalles que describiré más adelante.
Para continuar adicionaremos los proyectos a nuestra solución,
luego describiré las utilidades de cada uno de ellos:
Comencemos adicionando 2 proyecto de clases con nombre PyBusiness
y PyEntity.
Ahora adicionamos el primer proyecto de tipo WCF que será
el de biblioteca de servicios WCF con nombre PyWcfServiceLibrary.
Y por último adicionamos el segundo proyecto de tipo WCF
que será el de aplicación de servicios WCF con nombre PyWcfService.
Una de las recomendaciones para poder identificar el tipo
de proyecto son en las imágenes y recuadros seleccionados de color verte.
La estructura de los proyectos que acabamos de crear va
quedando de esta siguiente manera (ver imagen)
Las carpetas BackEnd y FrontEnd son consideraciones de
buenas prácticas al implementar una solución web, puede leer siguiente articulo.
Utilidades de los proyectos
adicionados a la solución:
En los proyectos PyBusiness y PyEntity quizás no hay mucho
por mencionar. Son muy usados casi en todo desarrollo de 3 a más capas.
PyBusiness en
este caso almacenará una clase para nuestra conexión a datos y las demás clases
serán para crear los métodos o funciones entre otros concernientes a la lógica
del negocio que estemos desarrollando dicho proyecto.
PyEntity se
encarga de almacenar las propiedades de nuestra entidades que son parte de la
lógica del negocio.
PyWcfServiceLibrary
proyecto de biblioteca de servicios que se encarga de incluye
automáticamente los tres archivos siguientes:
- Archivo de contrato de servicio (IService1.cs). Es una interfaz a la que se aplican los atributos de servicio WCF. Este archivo proporciona una definición de un servicio simple que muestra cómo definir los servicios, e incluye operaciones basadas en parámetros y un ejemplo de contrato de datos simple. Éste es el archivo predeterminado mostrado en el editor de código después de crear un proyecto de servicio WCF.
- Archivo de implementación de servicio (Service1.cs). Implementa el contrato definido en el archivo de contrato de servicio.
- Archivo de configuración de la aplicación (App.config). Poporciona los elementos básicos de un modelo de servicio WCF con un enlace HTTP seguro. Además incluye un extremo para el servicio y habilita el intercambio de metadatos.
PyWcfService proyecto
de servicio de
aplicación web, el encargado de ser parte de conformar la referencia de los demás proyecto, ya que este proyecto será el que
publicaremos en nuestro ISS (aquí se encontraran los servicios que publicaremos).
Además, incluye los tres archivos siguientes que luego iremos modificando:
- Archivo de host del servicio (Service1.svc).
- Archivo de contrato de servicio (IService1.cs).
- Archivo de configuración web (Web.config).
El contexto para la implementación será listar los
registro de una tabla:
Consideración
es para implementación:
Para este caso
determinare 2 grupos el GRUPO A de las clases genéricas que casi siempre se
implementa en un proyecto de 3 a N capas, y el GRUBO B que básicamente será
para la implementación de nuestro servicios (la gran parte es hacer referencia
a los métodos creados e ir )
EN EL GRUPO A:
- Crear la cadena de conexión
- Crear el método de la lógica de negocio (por ahora sólo usaremos un simple select)
- Crear nuestra entidad equivalente a la sentencia select
EN EL GRUPO B:
- Hacer referencia método creado que se realiza el GRUPO A.
- Luego se implementa la referencia del método o según otros contexto es hacer una copia al método creado que gracias a la Serialization se puede realizar la comunicación remota a pasar objetos por valor de un dominio de aplicación a otro.
Recordemos que la publicación
de nuestro servicio será a través de la aplicación PyWcfService. Iniciare la implementación haciendo énfasis a las
librerías a usar y a la cadena de conexión
En este caso haremos uso de Enterprise Library Versión 5.0.414.0. En el App.config del proyecto
PyWcfServiceLibrary implementamos las siguiente líneas (haremos referencia a las
librerías de Enterprise Library y la cadena de conexión)
Además debemos adicionar las librería del Enterprise Library en el proyecto PyWcfServiceLibrary y los mismo haremos para el proyecto PyBusiness (no debemos confundir con adicionar e importar).
Ahora implementaremos en el proyecto PyEntity todo los dataMember que es hacer referencia a los nombres de las columnas de nuestra entidad (tabla), en mi caso solo quiero visualizar 2 de ellas. Además debemos importar la librería using System.Runtime.Serialization.
using System.Runtime.Serialization;//Importar la referencia namespace PyEntity { [DataContract]//Adicionamos el contrato de datos public class ClsDepartamentoEN { //Adicionamos los DataMember (columnas de uestra entidad Departamento) [DataMember(Name = "COD_DEPARTAMENTO")] public string COD_DEPARTAMENTO { get; set; } [DataMember(Name = "DES_DEPARTAMENTO")] public string DES_DEPARTAMENTO { get; set; } } }
Siguiendo con la implementación:
Implementaremos en el proyecto PyBusiness nuestro método que nos devolverá la data según nuestro sentencia select.
- Adicionar una clase (en mi caso ClsDepartamentoBL.cs)
- Ahora si importamos las librerías necesarias y el proyecto PyEntity en la clase creado y creamos nuestro método GetDepartamentoList.
using PyEntity;//Hacemos referencia al proyecto donde estan los datamember del contrato de datos
using System.Data;//Importamos el System.Data
using System.Data.SqlClient;//Importamos el provedor SqlClient para el acceso a datos
//Importamos la librería de Enterprise Library
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
namespace PyBusiness
{
/* Modificamos la clase a publica */
public class ClsDepartamentoBL
{
/* Query Listar todos los departamentos */
public static List GetDepartamentoList()
{
Database database = DatabaseFactory.CreateDatabase();
//Database database = new DatabaseProviderFactory().Create("Cnx");
string StrQuery = string.Format("SELECT COD_DEPARTAMENTO, " +
" DES_DEPARTAMENTO " +
"FROM UBI_DEPARTAMENTO");
SqlCommand cmd = (SqlCommand)(database.GetSqlStringCommand(StrQuery));
IDataReader reader = database.ExecuteReader(cmd);
return ClsEntityCreator.CreateDepartamentoList(reader);
}
}
}
Ahora regresamos a nuestro proyecto PyWcfServiceLibrary e implementamos el metodo GetDepartamentoList en la clase IService1 para luego hacer referencia e implementar en la clase Service1
Clase IService1
//Importamos los proyectos de las entidades y del negocio using PyEntity; using PyBusiness; namespace PyWcfServiceLibrary { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. [ServiceContract] public interface IService1 { //Ahora implementamos el método GetDepartamentoList [OperationContract] List GetDepartamentoDataList(); } }
Calase Service1
//Importamos los proyectos de las entidades y del negocio using PyEntity; using PyBusiness; namespace PyWcfServiceLibrary { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in both code and config file together. public class Service1 : IService1 { //Ahora invocamos el método creado en el proyecto PyBusiness public List GetDepartamentoDataList() { return ClsDepartamentoBL.GetDepartamentoList(); } } }
En otros palabras
acabamos de crear un servicio llamado IService1 que esta conformado con un
método llamado GetDepartamentoDataList()
Para finalizar en el
proyecto PyWcfService hacemos referencia a nuestro servicio que acabamos de
crear y luego testeamos nuestro servicio creado
<%@ ServiceHost Language="C#" Debug="true" Service="PyWcfServiceLibrary.Service1" CodeBehind="PyWcfServiceLibrary.Service1.cs" %>
Testeamos nuestro servicio con la herramienta que nos proporciona el proyecto PyWcfService que es de aplicación de servicios WCF.
Proyecto en C#
Nos vemos en la siguiente fase que veremos sobre la publicación del servicio que acabamos de crear.
2 Comentarios
Es un gran aporte , como siempre bien explicado.
ResponderBorrarSaludos y muchas Gracias.
Eso espero mi estimado que la explicación sea lo necesario para ir aprendiendo acerca de servicios, ya que es un tema amplio... Saludos para ti también
ResponderBorrar