Estadisticas

Mostrando entradas con la etiqueta OData. Mostrar todas las entradas
Mostrando entradas con la etiqueta OData. Mostrar todas las entradas

10/14/2011

Cargando Datos Con WCF Data Services - Parte 2


Teniendo lista la Capa De Acceso A Datos, vamos a agregar un nuevo proyecto para poder montar los servicios, en el caso como los servicios son de tipo web, entonces necesitaremos de una aplicación de tipo web. Esto quiere decir que podremos utilizar una Aplicación Web Asp .Net "Normal", o bien una Aplicación Asp .Net "Vacía", para este ejemplo, utilizaremos lo segundo, es decir una aplicación ASP Vacía:




Después de haber agregado la aplicación ASP vacía, la primera acción que debemos de hacer, es copiar el "Connection String" de la capa de acceso a datos, esto lo podemos encontrar en el archivo "App.config"  del proyecto. Seleccionamos el connection string y lo copiamos:




Luego, ubicamos el archivo "Web.config", de nuestra aplicación de ASP, para pegar el connectin string, teniendo el cuidado de colocarlo dentro de la etiqueta "configuration".






Cuando tengamos lista nuestra solución con ambos proyectos listos (Sería SYM.AccesoADatos de tipo Class Library, y SYM.Servicios de tipo Asp .NET Vacía), procedemos a trabajar en la aplicación ASP, agregando un nuevo ítem, el cuál será de tipo WCF Data Service.


Cuando ya tenemos agregado nuestro WCF Data Service, nos aparecerá una ventana parecida a la siguiente en donde tenemos 3 aspectos importantes que resaltar:


Primero: En el recuadro de color rojo, es necesario colocar la fuente de datos, es decir de dónde expondremos los datos, en el caso lo que queremos es exponer son nuestras entidades del modelo de datos, por lo cual debemos de indicar que heredaremos del nombre "PedidosEntities".

Segundo: En recuadro de color azul, lo que tenemos es la simple inicialización de un método estático que no retorna ningún valor, y que a la vez inicializa una variable de tipo "DataServiceConfiguration" llamada config, la cual nos servirá para poder establecer los permisos sobre el acceso a los datos de nuestras entidades.

Tercero: En los comentarios que aparecen dentro del recuadro amarillo, se nos brindan los ejemplos de como podemos establecer los derechos sobre las entidades, por medio de la variable config de tipo "DataServiceConfiguration".

Después de haber hecho las observaciones vamos a proceder a modificar el código, para adaptarlo de tal forma que sea útil para el ejercicio.

El primer paso, es agregar dos referencias, la primera será la del proyecto de Acceso a Datos, y la segunda será un Assembly llamado "System.Data.Entity", ambas serán para el proyecto de Servicios, para eso damos click sobre el proyecto de Servicios, y damos click sobre la opción "Add Reference...":


Con lo que nos aparecerá un cuadro de diálogo parecido a éste (el diseño del cuadro de diálogo puede variar un poco en relación con el que se muestra en la imagen), luego damos click en la pestaña de proyectos ("Projects") y damos doble click sobre el proyecto de Acceso A Datos.

En esta otra imagen nos muestra cómo agregar la otra referencia:






A continuación lo tenemos que hacer el "using" del namespace de la capa de Acceso A Datos, y del Assembly recién agregado:




Con esto no resta más que modificar el código del servicio, para agregar los permisos correspondientes a las entidades que deseamos exponer, recordando que será por medio de la variable "config". También haremos uso del método "SetEntitySetAccesRule", el cual nos permite establecer los permisos a las entidades.

Este método acepta dos parámetros:

  • El primero que es de tipo string, y que nos servirá para poder expresar las entidades a las cuales le queremos asignar los permisos, también podemos escribir un asterisco ( * ), que funcionará como un comodín, el cual significa que los permisos serán establecidos a todas las entidades de nuestro Modelo de Datos.
  • El segundo parámetro es de tipo EntitySetRights, que representa una enumeración para asignar los permisos a las entidades escritas en el parámetro anterior.
Algunos de los posibles valores para este parámetro pueden ser:

  • All: Provee las todas las autorizaciones para crear, leer, actualizar y borrar datos.
  • AllRead: Proporciona la autorización para solo leer datos.
  • AllWrite: Brinda la autorización para escribir datos.
  • None: Deniega todos los permisos para el acceso a datos.
  • ReadMultiple: Provee la autorización para llevar a cabo consultas de lectura sobre varios ítems de la entidad.
  • ReadSingle: Nos da la autorización para llevar a cabo consultas de lectura sobre un solo item  de la entidad.
  • WriteAppend: Proporciona el permiso para crear nuevos ítem sobre la entidad.
  • WriteDelete: Brinda los permisos necesarios para borrar items de una entidad.
Después de esto procedemos a programar los permisos que le asignaremos a nuestras entidades del modelo de datos, la imagen nos muestra como deberá lucir nuestro código:





En la imagen se muestran varios recuadros de colores.·       

Dentro del recuadro de color rojo, se muestra la declaración completa para establecer los permisos a nuestras entidades del modelo de datos.

Dentro del recuadro negro, podemos observar el nombre de las entidades a las cuales le asignaremos los permisos.

Dentro del recuadro azul y verde, se muestran los permisos ya asignados. A las entidades se le pueden asignar varios permisos a la vez, siempre y cuando sean separados por el símbolo | ("pipe").

Con esto, ya tenemos listo nuestro servicio.

Antes de correrlo, debemos de colocar como nuestra página de inicio el servicio que acabamos  de crear, esto lo hacemos dando clic derecho sobre el archivo "ServicioPedidos.svc", y dando clic en la opción "Set As Start Page",  con esto al ejecutar la aplicación ASP, en el navegador nos aparecerá la siguiente ventana:


Si observan la URL que aparece, nos dice que estamos en nuestro ServicioPedidos.svc, y lo que nos muestra por medio del lenguaje XML, son las entidades que tenemos dentro de nuestro modelo de datos, dentro del recuadro rojo, podemos observar la entidad "Clientes", y dentro del recuadro azul la entidad "Pedidos".

Si en la URL le agregamos el nombre de alguna de nuestras entidades lo que sucederá es que nos mostrará siempre en el lenguaje XML, los registros que se encuentren dentro de esa entidad, tal y como lo podemos ver en la siguiente imagen en los recuadros de color rojo:



En la próxima publicación veremos como consumir éste servicio programando un cliente.

9/12/2011

Cargando Datos Con WCF Data Services - Parte 1

En esta oportunidad vamos a hablar y a trabajar un poco con WCF Data Services.

Para comenzar vamos a hablar sobre un par de conceptos importantes de WCF Data Services.

Según el MSDN, estos Data Services nos permiten exponer datos en la web por medio del Open Data Protocol (OData).

Este protocolo publica la información como como recursos direccionables a través de identificadores uniformes de recursos (URI), es decir que le asigna una única url al recurso que queremos exponer, para su fácil identificación.


WCF Data Services también incluye dos conjuntos de bibliotecas de cliente, uno para las aplicaciones cliente de .NET Framework generales y otro específicamente para las aplicaciones basadas en Silverlight.

WCF Data Services usa el protocolo de OData para direccionar y actualizar los recursos. De esta manera, puede tener acceso a estos servicios desde cualquier cliente que admita OData .

Para esta oportunidad, utilizaremos WFC Data Services para exponer entidades que estén dentro de nuestro modelo de Datos ADO .NET.

Después de hablar sobre conceptos iniciales, vamos a la prática:


Para poder comenzar, primero nos vamos a abrir SQL Server para poder crear una base de datos, la cual nos servirá para el desarrollo del ejemplo:



Después de haber creado la BD, le agregamos las tablas que se muestran a continuación, recordando que agregar las claves primarias con auto-identidad incremental en 1, además crearemos el diagrama para formar una relación:




Cuando ya tengamos lista nuestra base de datos, ahora nos toca trabajar del lado de Visual Studio, primero abrimos el programa para poder agregar una solución en blanco a la cual le llamaremos SYM.Pedidos.


Bueno, cuando la solución está creada, lo primero que tenemos que hacer es agregar un nuevo proyecto, será de tipo "Class Library", el cual contendrá nuestro modelo de entidades, tal y como se muestra en la imagen le llamaremos SYM.AccesoADatos




Seguidamente, comenzamos a crear la conección para poder acceder a los datos de nuestra base:

 Primero nos vamos al "Server Explorer", en la cual nos aparecerán las conecciones que tengamos (en mi caso no tengo ninguna), después damos click derecho sobre "Data Connection", para buscar dale click a la opción "Add Connection".




En la imagen siguiente, se nos muestra la ventana para poder agregar una conexión, el detalle es que si observan el nombre del servidor con el cual nos queremos conectar, solo le hemos colocado un punto (.), eso indica que nos conectaremos al servidor local de nuestro equipo. 




En esta otra imagen mostramos como nos deberá de quedar la conexión en nuestro explorador de servidores.






Como último paso para dejar terminada nuestra capa de Acceso A Datos, agregamos Modelo De Entidad De Datos:




Cuando demos click en botón "Add", nos aparecerá el asistente para poder generar  nuestro modelo, el cuál en la primera pantalla nos aparecerá las opciones si queremos generar nuestro modelo desde la base de datos, o si queremos crear un modelo vacío, para esta oportunidad, lo generaremos a partir desde la base de datos que creamos hace un momento:




En la siguiente pantalla de nuestro asistente, nos pedirá la conexión que se utilizará para poder acceder a la base de datos, que también ya la creamos, por lo tanto si desplegamos el combo, se nos desplegarán todas las conexiones existentes en el equipo (En el caso de tener varias) elegimos la conexión hacia nuestra base de datos, en caso de no estar chequeado la casilla de "Save entity connection string in App.config as:" la chequeamos y le dejamos el nombre que nos muestra por defecto, aunque sin ningún problema podemos cambiarlo, después damos click al botón siguiente:




En la siguiente y última pantalla de nuestro asistente, tenemos que seleccionar los objetos que queremos obtener desde nuestra base de datos, primero debemos de desplegar la pestaña que dice "Tables", para después poder chequear las dos tablas contenidas dentro de nuestra BD, seguidamente chequeamos la opción que dice "Pluralize or Singularize Generated Object Names" (Pluralizar o singularizar los nombres de los objetos generados), después si queremos le cambiamos el nombre al namespace del modelo, y después pulsamos el botón "Finish".




Ahora solo resta cambiar una propiedad en específico de nuestras entidades, llamada "Entity Set Name", la cual existe la posibilidad de que el nombre en plural no sea el correcto, por lo que lo corregiremos de la siguiente forma:


En el modelo de Datos, le damos clic derecho a nuestra entidad, y ubicamos la propiedad Entity Set Name, y le colocamos el nombre pluralizado de nuestra entidad tal y como se ve en la siguiente imagen:






Recuerden que este paso lo debemos de realizar por cada entidad que tengamos dentro de nuestro modelo de datos.


Hasta aquí hemos completado la primera parte de este tema, que se relaciona con la capa de acceso a datos de nuestra solución. En publicaciones posteriores estaremos completando el desarrollo del proyecto.

8/14/2011

Open Data Protocol (OData)

He tenido la necesidad de conocer un poco más sobre el protocolo OData, así aprovechando la oportunidad, les comparto la información que encontré:


OData fue desarrollado por Microsoft para ser un estándar abierto para la comunicación de datos a través de Internet, y es la evolución de lo que era anteriormente conocido como ADO.NET Data Services.


Open Data Protocol (OData) es un protocolo Web que permite la creación de servicios basados en HTTP (basado en el modelo arquitectónico de la Web), donde los recursos son identificados por medio de Uniform Resource Identifier (URI) y definiendo un modelo abstracto de datos para ser publicados y editados con clientes web utilizando simples mensajes  http. OData esta construido bajo tecnologías Web como lo son HTTPAtom  Publish Protocol (Atom Pub) y JSON (Java Script Object Notation).


OData tratar de dar solución a la exposición de orígenes de datos, relacionales o no, a través de un Servicio Web ejecutando operaciones con un lenguaje “estándar” basandose en:

  • La creación de una forma uniforme de representación de datos estructurados a través de Atom oJSON (JavaScript Object Notation)
  • La utilización de convenciones URL uniformes tanto para la navegación, filtrado, orden y paginación de datos (entre otros)
  • La creación de operaciones uniformes dirigidas por dirección mediante las acciones GETPOST,PUT y DELETE.

Lo mejor de todo, es que cuando utilizamos .NET Framework podemos exponer fácilmente los datos de una BD mediante OData, y luego mediante un servicio WCF.


El protocolo de datos abierto no define un nuevo esquema de autenticación o autorización. En cambio, los ejecutores de los servicios de OData puede optar por usar las tecnologías de autenticación y autorización que mejor se adapten a su escenario de destino.


El uso de mecanismos de autenticación para evitar la inserción o edición de los recursos expuestos por un servicio OData por clientes desconocidos o no autorizados es recomendable pero no obligatorio.


Entre las empresas que comienzan a exponer sus propios datos por OData podemos mencionar: eBay, Facebook Insight, IBM WebSpehere, Netflix, Twitpic, GeoREST, Nuget, Windows Live o Dbpedia, por mencionar algunas.


Para más información puedes visitar http://www.odata.org