miércoles, 23 de septiembre de 2009

ASP.NET 4.0 Web Form ClientIDMode

Visual Studio 2010 Son muchas las novedades que se incluyen y que vamos descubriendo de a poco en la nueva versión de ASP.NET 4.0

Hoy aprovecho para comentarles rápidamente una de ellas, me refiero a la propiedad:

ClientIDMode

Esta propiedad indica cómo se generara la propiedad ClientID de los controles.

Pero pongámonos en contexto, hasta ahora (antes de ASP.NET 4.0), cuando queríamos referirnos a un control desde el cliente (java script) lo hacíamos de la siguiente forma (Supongamos que queremos seleccionar el botón btnAceptar):

var btn = document.getElementById("btnAceptar");

Pero que sucedía si este botón estaba dentro de un control contenedor (Control de Usuario, Dentro de un ContentPlaceHolderID, etc..)

Sucede que ASP.NET al generar la página, autogenera estos ID, por ejemplo:

ctl00$ContentPlaceHolder2$btnAceptar

Y para poder acceder a ellos comúnmente hacíamos esto:

var btn = document.getElementById("<%=btnAceptar.ClientID %> ");

Con ASP.NET 4.0 tenemos otra manera de resolver este problema, y es el usar la propiedad ClientIDMode de la clase Web.UI.Control.

Si establecemos esta propiedad a:

ClientIDMode="Static"

Conseguiremos que al regenerar la pagina se mantenga el mismo ClientID y podríamos hacer lo siguiente:

var btn = document.getElementById("btnAceptar");

Veamos un ejemplo y después comentaremos sobre los posibles valores de la propiedad:

Código de la pagina (ASPX):

ASP.NET 4.0 ClientIDMode 

Código de la pagina generado (HTML):

ASP.NET 4.0 ClientIDMode Client

Expliquemos los distintos valores que pueden asignarse a esta propiedad y los resultados que se obtendrán:

Web.UI.Control.ClientIDMode

VALOR DESCRIPCION
Legacy El valor de ClientID es generado por la concatenación de los ID de cada uno de los padres con los nombres de contenedores del control.
Este algoritmo es el que se utiliza en las versiones de ASP.NET antes de ASP.NET 4.0.
Static El valor de ClientID se establece en el valor de la propiedad ID.
Predictable Este algoritmo se utiliza para los controles que se encuentran en controles enlazados a datos. El valor de ClientID se genera mediante la concatenación del valor ClientID  del padre. Si el control esta enlazado a datos y genera varias filas, el valor del campo de datos especificado en la propiedad ClientIDRowSuffix se añade al final. Si la propiedad ClientIDRowSuffix está en blanco, un número secuencial se añade al final en lugar de un valor de campo de datos. Cada segmento está separado por un carácter de subrayado (_).
Inherit El control usará (hereda) el mismo algoritmo que el padre.

Resumen (ClientIDMode):

Con ASP.Net 4.0 y la nueva propiedad ClientIdMode podemos especificar con precisión  como deben generarse los ClientID de nuestros objetos (Legacy, Static, Predictable, Inherit).

La propiedad ClientIdMode puede ser definida en:

  • En el control:

   <asp:Button ID="btnOk" ClientIDMode="Static"

  • Para todos los controles de una página:

   <%@ Page ClientIDMode="Static"

  • Para todas las páginas de una aplicación (web.config):

   <system.web>

     <pages clientIDMode="Static"></pages>

   </system.web>

Artículos Relacionados:

lunes, 21 de septiembre de 2009

ASP.NET AJAX en 10 minutos (Introducción)

ASP.NET AJAX

¿Qué es AJAX?

Acrónimo de Asynchronous JavaScript And XML.

No es otra cosa que la combinación de varias tecnologías existentes para el desarrollo de aplicaciones web interactivas:

  • XHTML y CSS (DHTML)
  • XMLHttpRequest
  • JavaScript
  • Document Object Model
  • XML y XSLT

La experiencia de navegación del usuario será mucho más rica. Ya no se refrescará la página constantemente al interactuar con ella.

Veamos un ejemplo sencillo que nos muestre el potencial de ASP.NET AJAX. Con esto podremos ver los principales controles de esta tecnología.

ASP.NET AJAX Ejemplo Práctico

En el ejemplo que trataremos insertaremos una grilla con información de los empleados que se encuentra en un archivo XML, y habilitaremos el paginado del grid, y como lo haremos usando AJAX, pues al paginar no se recargará toda la página.

1. Lo primero que haremos será crear el proyecto de ASP.NET. En mi caso estoy usando VS 2008. Si estas usando VS 2005 debes tener instalada las extensiones de Microsoft ASP .Net 2.0 AJAX Extensions 1.0 y deberás escoger la plantilla de proyecto ASP.NET AJAX Enabled Web Site.

2. Después de creado el proyecto, crearemos una nueva página web (Web Form) a la cual llamaremos Empleados.aspx

3. Agregaremos entonces a dicha página 2 controles:

· ScriptManager: Se encarga del trabajo con el cliente.

· UpdatePanel: Dentro de este contenedor colocaremos todos los controles que deseamos se envíen al servidor sin necesidad de recargar la pagina completamente.

4. Es este punto colocaremos dentro del UpdatePanel los controles deseados, en nuestro caso de ejemplo una grilla (GridView) a la cual llamaremos grdEmpleados.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Empleados.aspx.cs" Inherits="Ajax.Empleados" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title>Ejemplo Básico de Ajax</title>
</head>
 
<body>
  <form id="form1" runat="server">
  <div>
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
   
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
        <asp:GridView ID="grdEmpleados" runat="server" AllowPaging="True"
          AutoGenerateColumns="False" DataSourceID="XmlDataSource1" >
          <Columns>
            <asp:BoundField DataField="IDEmpleado" HeaderText="IDEmpleado" />
            <asp:BoundField DataField="Nombre" HeaderText="Nombre" />
            <asp:BoundField DataField="Apellidos" HeaderText="Apellidos" />
          </Columns>
        </asp:GridView>
      </ContentTemplate>
    </asp:UpdatePanel>
   
    <%--Los Datos--%>
    <asp:XmlDataSource ID="XmlDataSource1" runat="server"
      DataFile="~/App_Data/Empleados.xml">
    </asp:XmlDataSource>
    <asp:XmlDataSource ID="XmlDataEmpleados"  runat="server"></asp:XmlDataSource>       
     
  </div>
  </form>
</body>
</html>

 

Esta grilla (Grid grdEmpleados) se nutre o se carga desde un fichero Empleados.xml y configuramos la grilla para que habilite el paginado. El resultado sería este:

ASP.NET AJAX 1.0 Ejemplo

Como se observa en la imagen, hemos creado un grid con paginado, pero lo interesante es que al movernos entre las paginas, no se recarga toda la página, solo los datos de la grilla.

Conclusiones:

Adicionar AJAX a nuestras aplicaciones ASP.NET es muy fácil, y el resultado es bien satisfactorio a la experiencia del usuario. Solo es cuestión de incluir un ScriptManager y un objeto UpdatePanel -ContentTemplate dentro del cual colocaremos los objetos que queremos se refresquen sin necesidad de recargar toda la página.

Pero hasta aquí solo hemos rallado la pintura del uso de ASP.NET AJAX, hay otros controles bien interesantes como es el caso del UpdateProgress, Timer. También tenemos otra interesante colección de componentes  ASP.NET AJAX Control Toolkit con la que podremos obtener interesantes efectos con la inclusión de unas pocas líneas en nuestros proyectos.

NOTA: Hasta aquí hemos comentado algunas de las ventajas, pero también debemos tener en cuenta algunas limitaciones o cuestiones en el uso de Ajax, en otro artículo intentaré comentarlas.

Ver video relacionado…

Artículos Relacionados:

miércoles, 16 de septiembre de 2009

jQuery UI, DatePicker o Selector de Fecha

jQuery UI Solo

En un artículo anterior comenté sobre jQuery UI Dialog, un interesante componente para mostrar cuadros de diálogos.

Hoy quiero hablarles sobre otro componente de esta misma librería, me refiero al DatePicker o Selector de Fecha.

Este widget tiene la funcionalidad de seleccionar una fecha sin la necesidad de teclearla o escribirla, para ello cuenta con un calendario totalmente configurable que se despliega junto al TextBox (input).

jQuery Picker Simple

Con este artículo pretendo dejar el código completo asociado a 2 ejemplos prácticos:

1. El primer ejemplo es el uso sencillo del mismo, sin apenas ninguna configuración adicional, dejando los valores por defecto.

2. El segundo lo complicaremos un poco mas, definiendo algunas configuraciones que no son escogidas por defecto.

DatePicker Simple

Pero vallamos a la práctica. Lo primero que haremos será escribir el código para poner un simple input de selección de fecha:

El primer paso es hacer referencia a los 3 archivos necesarios:

  1. La hoja de estilo (css).
  2. La librería jQuery (jQuery.min.js).
  3. La librería jQuery (jQueryUI.min.js).

Las referencias a estos 3 archivos del ejemplo, son desde sitios públicos, pero lo aconsejable es bajarnos estos archivos e incluirlos en nuestro propio proyecto.

Lo próximo que haremos es adicionar el código java script y la caja de texto:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jQueryUIDatePicker.aspx.cs" Inherits="jQueryUI_jQueryUIDatePicker" %>
<head runat="server">
  <title>jQuery UI DAteTime Picker</title>
  
  <link type="text/css" href="http://jquery-ui.googlecode.com/svn/tags/1.7/themes/redmond/jquery-ui.css" rel="stylesheet" />    
  <script type="text/java script" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
  <script type="text/java script" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
  
  <script type="text/java script">
    $(document).ready(function(){
      $('#txtFechaSimple').datepicker();                                   
    });
  </script>
</head>
<body>
  <form id="form1" runat="server">
    <div><asp:TextBox ID="txtFechaSimple" runat="server"></asp:TextBox></div>
  </form>
</body>
</html>

El resultado seria el siguiente:

jQuery Picker Simple En realidad el resultado sería el de la imagen con la única diferencia  de que el formato de fecha y los nombres de meses y días, no estarían en español, sino en ingles que es la el idioma configurado por defecto.

Para ver el selector de fecha en español (DatePicker en Español) además de algunas otras opciones, te recomiendo leas el ejemplo que viene a continuación.

DatePicker con algunas configuraciones extras

Este segundo caso lo complicaremos un poco mas, pero veamos primero el código, el resultado y después lo comentamos poco a poco para comprenderlo mejor.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="jQueryUIDatePicker.aspx.cs" Inherits="jQueryUI_jQueryUIDatePicker" %>
<head runat="server">
  <title>jQuery UI DAteTime Picker</title>
    
  <link type="text/css" href="http://jquery-ui.googlecode.com/svn/tags/1.7/themes/redmond/jquery-ui.css" rel="stylesheet" />    
  <script type="text/java script" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
  <script type="text/java script" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
  
  <script type="text/java script">
    $(document).ready(function()
    {       
      $('#txtFecha').datepicker(
      { dateFormat: 'd MM, yy',
        minDate: '+0D',
        maxDate: '+1Y', 
        changeMonth: true,
        changeYear: true,
        numberOfMonths: 2,
        dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
        monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 
                     'Junio', 'Julio', 'Agosto', 'Septiembre', 
                     'Octubre', 'Noviembre', 'Diciembre'],
        monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr',
                          'May', 'Jun', 'Jul', 'Ago', 
                           'Sep', 'Oct', 'Nov', 'Dic']  
      });                                                               
    });
  </script>
</head>
<body>
  <form id="form1" runat="server">
    <div class="demo">
      <p>Fecha: <asp:TextBox ID="txtFecha" runat="server"></asp:TextBox></p>
    </div>
  </form>
</body>
</html>

El resultado sería el siguiente:

jQuery Picker Castellano

Comentemos ahora alguna de las configuraciones:

dateFormat: 'd MM, yy'. Con esta línea definimos el formato en que se muestra la fecha en el control de texto. Hemos escogido día mes y año, formato de fecha español.

minDate: '+0D' y maxDate: '+1Y'. Con esto establecemos un rango de fechas validas, o sea, definimos la fecha mínima y máxima donde podremos elegir una fecha, los días fuera de este rango no podrán ser seleccionado y por ende aparecerán deshabilitados.

changeMonth: true y changeYear: true. Acá especificamos que podremos cambiar el mes y el año mediante una lista desplegable. Al usar esta opción es mucho mas sencillo el seleccionar fechas distantes de la actualmente seleccionada.

numberOfMonths: 2. Si deseamos mostrar varios meses (multi-meses), en nuestro caso especificamos que mostraremos 2 meses simultáneamente.

dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa']
monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo'
                            'Junio', 'Julio', 'Agosto', 'Septiembre', 
                            'Octubre', 'Noviembre', 'Diciembre']
monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr',
                            'May', 'Jun', 'Jul', 'Ago', 
                            'Sep', 'Oct', 'Nov', 'Dic']

Con estas ultimas 3 opciones definimos el comportamiento de idioma español, o sea, definimos los días de la semana y el nombre de los meses que aparecerán en el calendario que se mostrará. Sino especificamos estas características se mostraran con el valor regional por defecto que es el ingles.

Nota: Para solucionar el problema de simular el DatePicker en español (castellano), podemos usar estas ultimas 3 características. O también podemos usar un fichero de configuración regional personalizado (ui.datepicker-es.js) este fichero normalmente podemos descargarlo de internet o bien declararlo nosotros mismos, por si escogemos esta segunda opción (que es además la que les recomiendo), les dejo el código que deberíamos poner en este fichero:

jQuery(function($) {
$.datepicker.regional['es'] =
  {
    clearText: 'Borra',
    clearStatus: 'Borra fecha actual',
    closeText: 'Cerrar',
    closeStatus: 'Cerrar sin guardar', 
    prevStatus: 'Mostrar mes anterior',
    prevBigStatus: 'Mostrar año anterior', 
    nextStatus: 'Mostrar mes siguiente',
    nextBigStatus: 'Mostrar año siguiente',
    currentText: 'Hoy',
    currentStatus: 'Mostrar mes actual',
    monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
    monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
    monthStatus: 'Seleccionar otro mes',
    yearStatus: 'Seleccionar otro año',
    weekHeader: 'Sm',
    weekStatus: 'Semana del año',
    dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
    dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'],
    dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'],
    dayStatus: 'Set DD as first week day',
    dateStatus: 'Select D, M d',
    dateFormat: 'dd/mm/yy',
    firstDay: 1,
    initStatus: 'Seleccionar fecha',
    isRTL: false
  };
  $.datepicker.setDefaults($.datepicker.regional['es']);
});

Existen otras muchas características que podemos definirle a este control, si quieres indagar un poco mas pincha aquí.

Notas sobre jQuery UI DatePicker:

  • Si usamos un asp:TextBox para relacionarlo al calendario, como en nuestro ejemplo, jamás definir ReadOnly="true"; pues el comportamiento no será el esperado.

    <asp:TextBox ID="txtFecha" ReadOnly="true" runat="server"></asp:TextBox>

  • Si usamos asp:TextBox debemos tener en cuenta que si definimos Enabled="false", esto hace que no se habilite (funcione) el calendario.

    <asp:TextBox ID="txtFechaIDA" Enabled="false" runat="server"></asp:TextBox>

  • Si encuentro alguna mas la agregaré…

Artículos relacionados:

miércoles, 9 de septiembre de 2009

SQL 2008, Nuevos Tipos de Datos

 SQLServer2008_thumb

Nuevos Tipos de Datos

  • Fecha y Hora
  • Espaciales o Geográficos
  • Estructuras Jerárquicas
  • FileStrem

 

Fecha y Hora

SQL Server 2008 introduce cuatro nuevos tipos de datos de fecha y hora. Estos tipos permiten a las aplicaciones tener tipos independientes para la fecha y la hora, un mayor intervalo de años, mayor precisión en las fracciones de segundo, y compatibilidad para desplazamiento de zona horaria.

A continuación hago una comparativa de los 6 tipos de datos de fecha y hora, detallando el formato, el rango y el tamaño que ocupa cada uno de ellos:

TIPO DE DATOS CARACTERISTICAS
Time

hh:mm:ss[.nnnnnnn], 00:00:00.0000000 a 23:59:59.9999999, 3 a 5 bytes

Date

AAAA-MM-DD, 0001-01-01 a 9999-12-31, 3 bytes

Smalldatetime

AAAA-MM-DD hh:mm:ss, 1900-01-01 a 2079-06-06, 4 bytes

Datetime

AAAA-MM-DD hh:mm:ss[.nnn],           1753-01-01 a 9999-12-31, 8 bytes

datetime2(7)

AAAA-MM-DD hh:mm:ss[.nnnnnnn]        De 0001-01-01 00:00:00.0000000 a 9999-12-31 23:59:59.9999999, 6-8 bytes

datetimeoffset(7)

AAAA-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm, De 0001-01-01 00:00:00.0000000 a 9999-12-31 23:59:59.9999999 (en UTC), 8-10 bytes

 

Espaciales o Geográficos

Hay dos tipos de datos espaciales:

  1. Geometry: Admite datos planos o euclidianos (de tierra plana).
  2. Geography: Almacena datos elípticos (tierra redonda), como coordenadas de latitud y longitud GPS.

Solo 7 de los 11 tipos de datos Geometry y Geography admiten crear instancias; puede crear y trabajar con estas instancias (o crear instancias de las mismas) en una base de datos.

La figura siguiente describe la jerarquía de Geometry en la que se basan los tipos de datos Geography y Geometry. Los tipos a partir de los que pueden crearse instancias de Geometry y Geography se indican en azul.

SQLDatosEspaciales_thumb1

 

Estructuras Jerárquicas

Los datos jerárquicos se definen como un conjunto de elementos de datos que se relacionan entre sí mediante relaciones jerárquicas. Las relaciones jerárquicas son aquellas en las que un elemento de los datos es el elemento primario de otro elemento. Los datos jerárquicos son comunes en las bases de datos. Entre otros, se incluyen los siguientes ejemplos:

  • Una estructura organizativa
  • Un sistema de archivos
  • Un conjunto de tareas de un proyecto
  • Un gráfico de vínculos entre páginas web

 

FileStream

Muchos de los datos que se crean todos los días son datos no estructurados, como documentos de texto, imágenes y vídeos. Estos datos no estructurados se almacenan fuera de la base de datos a menudo. Esta separación puede producir complejidades en la administración de datos. O bien, si los datos están asociados a almacenamiento estructurado, se pueden limitar las capacidades de transmisión por secuencias de archivo y rendimiento.

FILESTREAM integra SQL Server con un sistema de archivos NTFS almacenando los datos de objeto binario grande (BLOB) varbinary(max) como archivos en el sistema de archivos. Las instrucciones de Transact-SQL pueden insertar, actualizar, consultar, buscar y realizar copias de seguridad de los datos FILESTREAM.

El tamaño y el uso de los datos determinan si debería usar el almacenamiento de base de datos o el almacenamiento del sistema de archivos. Si las condiciones siguientes son verdaderas, debería pensar en usar FILESTREAM:

  • Los objetos que se están almacenando son, por término medio, mayores de 1 MB.
  • El acceso de lectura rápido es importante.
  • Está desarrollando aplicaciones que usan un nivel intermedio para la lógica de la aplicación.

 

Hasta aquí el comentario sobre los nuevos tipos de datos, como hemos visto solo hemos hablado a grandes rasgos de estos, pero bien merecería la pena hacer un articulo independiente para cada uno de ellos donde además de verlos en profundidad, podamos ver ejemplos de los mismos, en fin, es algo de lo que a lo mejor escriba en próximas semanas…

 

Artículos Relacionados:

SQL Server 2008, Novedades

SQLServer 2008

Novedades Principales de SQL Server 2008

La nueva versión del motor de base de datos de Microsoft, SQL Server 2008, viene con una serie de importantes mejoras, aprovecho este espacio para citar algunas que a mi juicio resultan muy interesantes:

  • Nuevos Tipos de Datos
  • Mejoras de código Transact SQL (T-SQL)
  • Tabla como parámetros
  • Columnas dispersas
  • Índices filtrados
  • Reporting Services ( SSRS )
  • ADO.Net Entity Framework
  • ADO.Net Synchronization Services
  • Énfasis en la Seguridad

Estas son las principales áreas donde se han introducido cambios significativos desde mi punto de vista, e iré comentando algunas de estas características en próximos artículos. Por lo pronto hoy comienzo hablando de los Nuevos Tipos de Datos (leer más …)

lunes, 7 de septiembre de 2009

WCF, Desarrollando un Servicio y Cliente ASP.Net

La semana pasada publiqué un artículo (WCF, Introducción y Conceptos Básicos), después de comprendidos los conceptos básicos, pasemos a la acción.

En dicho artículo comentábamos sobre los pasos para desarrollar un servicio, acá implementaremos cada uno de esos pasos:

  1. Definir el Contrato (ServiceContract)
  2. Implementar el Contrato (ServiceContract)
  3. Configurar el Servicio
  4. Diseñar una aplicación Hosting del servicio
  5. Diseñar una aplicación cliente del servicio

Antes de comenzar plantemos el ejemplo que queremos implementar:

Imaginemos que deseamos crear un servicio y un cliente web que lo consuma, y que dicho servicio nos de la posibilidad de:

  • Obtener todos los países de una tabla de datos.
  • Insertar un nuevo país.
  • Refrescar la lista de países.

WCF, Definir el Contrato

En este punto es donde definiremos la interfaz, agregando los distintos métodos que serán incluidos en el contrato.

Pero antes deberemos crear una solución y dentro agregaremos un proyecto que será nuestro servicio WCF.

WCFCrearServicio

Como vemos en la figura, el proyecto que agregaremos será una Biblioteca de Servicios WCF y la nombraremos WCFUtiles.

Lo próximo que haremos será agregar un Servicio WCF al proyecto:

WCFCrearServicioCodigosWS 

En nuestro caso de ejemplo le llamaremos al servicio de WCFCodigosWS.svc”. Al aceptar se nos crearan automáticamente 3 archivos:

WCFCrearServicioCodigosWS Interfaz

En el archivo señalado es donde definiremos el contrato del servicio,  que no es otra cosa que definir la interfaz que deseamos:

WCFCrearServicioCodigosWS Interfaz 1

Nótese como en la interfaz ICodigosWS hemos definido 3 métodos:

  • ObtenerPaises
  • AdicionarPais
  • RefrescarPaises

Estos métodos serán los que posteriormente implementaremos en la clase final del servicio.

Como algunos de estos métodos devuelve un tipo de datos List<CodigoWS>, necesitaremos definir el atributo ServiceKnownType. Dentro del esquema que viaja con el mensaje las colecciones viajan como array pero es preciso decirle de que tipo es ese array, para que el cliente pueda posteriormente deserializarlo; es por ello que definimos este atributo.

WCF, Definir o Implementar el Contrato

Para ello abriremos el segundo archivo CodigosWS.cs, donde definiremos el contrato, que no es otra cosa que definir una clase que implemente la interfaz creada anteriormente ICodigosWS.

WCFCrearServicioCodigosWS Definicion

Como veras en la figura, se define una clase CodigosWS, que implementa la interfaz ICodigosWS. Y se implementan los 3 métodos definidos en la interfaz. Veamos la definición de uno de los métodos:

WCFCrearServicioCodigosWS Definicion Obtener Paises

WCF, Configurar el Servicio

La configuración del servicio la hacemos en un fichero de configuración Web.Config.

WCFCrearServicioCodigosWS Configuracion

En esta imagen vemos una configuración muy básica, mas adelante en otro articulo profundizaré un poco más sobre las posibles configuraciones.

En el Web.Config, configuraremos 2 cosas:

El Servicio (<services>):

  • El nombre del servicio que coincidirá con el nombre de la clase.
  • El behaviorConfiguration que es definido más abajo en el mismo fichero.

Dentro del servicio debemos identificar un endpoint del mismo:

  • Definiremos el contrato del endpoint.
  • El tipo de binding.

El Comportamiento (<behaviors>):

  • Exponer el metadata para que los clientes puedan ver y consumir el servicio.

Llegados a este punto, podemos compilar el servicio y comprobar si todo ha ido bien, para ello abriremos el fichero CodigosWS.svc en el explorador, y debemos obtener una imagen como esta:

WCFCrearServicioCodigosWS Comprobar

Esto nos indica que nuestro servicio ya esta creado y expuesto hacia el mundo con el metadata señalado.

WCF, Hosting del servicio

En este punto nada debemos hacer, porque en nuestro ejemplo hemos hosteado el servicio en el IIS (localhost).

WCF, Diseñar una aplicación cliente del servicio

Llegados aquí ya estamos listos para crear el cliente o consumidor del servicio.

Agregaremos a la solución un nuevo Sitio Web de Tipo ASP.NET, al que nombraremos ClienteWeb.

Lo primero que haremos en el proyecto será hacer referencia a nuestro servicio (Agregar Referencia de Servicio).

WCFCrearClienteCodigosWS Agregar Referencia Servicio

Después crearemos una página que contendrá un grid con el resultado de nuestro servicio y un botón que será el encargado de ir al servicio y obtener la lista de países:

WCFCrearClienteCodigosWS Pagina Aspx

WCFCrearClienteCodigosWS Pagina cs

Después de creada e implementada la página pasaremos a compilar el proyecto para ver si todo esta bien. Posteriormente pondremos el proyecto y la página como elementos de inicio, y ejecutaremos para ver el resultado, lo cual debería ser algo como esto:

WCFCrearClienteCodigosWS Pagina

Y hasta aquí este ejemplo práctico de como construir y consumir un servicio WCF en ASP.Net. Espero les halla servido como base. Más adelante escribiré otro artículo sobre los distintos comportamientos que podemos definirle a un servicio WCF.

hasta la próxima…

Artículos Relacionados:

martes, 1 de septiembre de 2009

WCF, Introducción y Conceptos Básicos

Hace unos meses atrás publiqué un artículo sobre las novedades del .NET Framework 3.0. Entre estas se encontraba la que hoy nos ocupa (Windows Comunication Fundation WCF).

Para intentar dar una idea generar sobre WCF dividiré la charla en 2 artículos:

  • WCF, Introducción y Conceptos Básicos (Este artículo).
  • WCF, Desarrollando un Servicio y Cliente (Artículo que publicaré la próxima semana, donde veremos el código de un ejemplo simple).

WCF, Introducción y Conceptos Básicos

¿Qué es WCF?

Es un modelo de programación para el desarrollo de aplicaciones con arquitectura orientada a servicios (SOA). Aplicaciones distribuidas basadas en la comunicación mediante mensajes.

WCF consiste en un número de bibliotecas de clase contenidas en el NET Framework 3, para desarrollar sistemas que envían mensajes entre servicios y clientes sobre diversos mecanismos de transporte.

WCF, Ventajas

  • Proporciona un único modelo de programación tipado de aplicaciones distribuidas basadas en servicios.
  • Encapsula y simplifica el desarrollo de aplicaciones soportadas por las diversas tecnologías distribuidas.
  • Permite el desarrollo de aplicaciones .NET capaces de interoperar con aplicaciones desarrolladas con otras tecnologías (J2EE, SAP).

WCF 1

WCF, Principales Características

Una aplicación WCF está compuesta por:
  • Clientes: Son aplicaciones que inician la comunicación.
  • Servicios: Son aplicaciones que esperan los mensajes de los clientes y responden a los mismos.

Los mensajes son enviados entre endpoints. Un endpoint es un lugar donde un mensaje es enviado, o recibido, o ambos.

Un servicio expone uno o más application endpoints, y un cliente genera un endpoint compatible con uno de los endpoints de un servicio dado.

La combinación de un servicio y un cliente compatibles conforman un communication stack.

WCF, Arquitectura

image

WCF, Pasos para desarrollar un servicio.

  1. Definir el Contrato (ServiceContract): Se escribe la interfaz en un lenguaje de programación de .NET, agregando los distintos métodos que serán incluidos en el contrato.
  2. Implementar el Contrato (ServiceContract): Se escribe una clase mediante la cual se implemente la interfaz. Es posible establecer comportamientos a la definición del servicio usando el atributo ServiceBehavior.
  3. Configurar el Servicio: Especificar los endpoints y metadata del servicio, estos son definidos en un archivo de configuración de .NET (Web.config o App.config).
  4. Diseñar una aplicación Hosting del servicio: Web Host dentro del IIS - Self-Host dentro de cualquier proceso .NET - Managed Windows Services - Windows Process Activation Service.
  5. Diseñar una aplicación cliente del servicio: Acá definiremos las aplicaciones clientes que consumirán el servicio.

Hasta aquí las ideas y conceptos generales a tener en cuenta para comprender esta nueva tecnología. La semana próxima publicaré el código de un ejemplo practico de desarrollo de un servicio y un cliente de WCF.

Artículos Relacionados: