OData – Open Data Protocol

OData es un protocolo especialmente diseñado para trabajar con datos y para esto utiliza otros protocolos y tecnologías sobradamente reconocidas como Http, AtomPub y JSon.

Gracias a que OData se está abriendo camino como solución estándar para exponer los datos ya podemos disponer de diferentes recursos a nuestra disposición:

  • Clientes: No solo desde el navegador podemos consumir los datos expuestos desde el protocolo OData, también existen otras aplicaciones preparadas para utilizar OData como  Excel 2010, OData Explorer, Librerías cliente móviles, controles Telerik, etc.
  • Aplicaciones: Las aplicaciones que actualmente ya exponen sus datos mediante OData como SharePoint 2010, Windows Azure, SQL Reporting Services, etc.
  • Servicios abiertos: Servicios que exponen sus datos de forma gratuita como Facebook Insights, Vancouver Street Parking, Nuget, Stack Overflow, etc

Ahora cuando necesitemos exponer datos en nuestras aplicaciones por ejemplo siguiendo las especificaciones REST, sabemos que OData nos facilitará mucho la faena, y además dispondremos de muchos servicios actualmente que ya exponen sus datos con este protocolo.

 

Para poder empezar y poder entender su funcionamiento, procederé a crear un ejemplo:

Creación de BBDD en SQL 2014

1 º Creación de la BBDD con nombre Taller de manera Local con SQL Server Management Studio 2014

Creación de dos tablas básicas Vehículos y Clientes:

Ver: Imagen creacion BBDD y tablas

2º Cumplimentar datos  en las correspondientes tablas

Tabla Vehívulos:

Ver: Imagen tabla Vehículos

Tabla Clientes:

Ver: Imagen tabla Clientes

 

3º Creación de Sripts para publicar BBDD en Azure:

Ver: Imagen de creación de script

 

4 º Modificación de parámetros para publicación de la BBDD en Azure, despues de pasar la pantalla de bienvenida y luego seleccionar las tablas a exportar y tras configurar los parámetros de localización del fichero (aquí podremos salvar el fichero en local o crearlo en una ventana de consulta en SQL), daremos click sobre el botón de Advanced y configuremos los siguientes parametros:

Ver: Imagen de parametros a configurar en SQL para AZURE

 

Script generado para publicación de BBDD en Azure:

Descargar: Descargar Script BBDD SQL

Imagen de script generado

 

5º Tras Conectarnos con nuestro servidor en Azure:

Imagen de datos de conexion al servidor Azure

Daremos click derecho sobre nuestra conexion:

Imagen new Query sobre nuestro servidor

Luego introduciremos el  siguiente comando:

CREATE DATABASE Taller

GO

 

6º Una vez que se complete la creación de la BBDD en Azure de manera satisfactoria, daremos nuevamente click derecho pero esta vez sobre nuestra BBDD Taller y daremos click sobre New Query:

Ver: Imagen New Query sobre nuestra BBDD

Es en esta ventana es donde pegaremos el contenido de nuestro Script generado anteriomente: BBDDTallerAzure

 

Y daremos al botón de Execute:

Ver: Imagen Execute

 

Comprobaremos en Azure el resultado, no dirigiremos a Azure SQL y ppodremos comprobar que nuestra BBDD esta correctamente subida:

Ver: Imagen BBDD SQl en AZURE

 

 

Creaccion del Proyecto en Visual Studio 2015 Community

Tras la creación y publicación de nuestra BBDD en Azure, el siguiente paso será la creación de nuestro proyecto en Visual Studio Community 2015 :

 

1º Desde el menú File, seleccionar New, luego click en Project… :

En la ventana de  New Project seleccionaremos Installed > Templetes> Visual C#>Web y seleccionaremos ASP.NET Web Application.

El cual llamaremos ServicioOData.

Ver: Imagen creacion New Project

Después de dar click en OK, empezara la creación de nuestro proyecto y solución.

Tras esto, nos cargará una ventana de Templete, en la cual seleccionaremos Empty y luego OK:

Ver: Imagen seleccion de Template

 

2º Nuestro siguiente paso, será la creación de una carpeta en nuestro Project : ServicioOData, la cual llamaremos Model, en la que añadiremos nuestro Modelo de nuestra BBDD publicada en Azure:

Ver: Imagen añadir Modelo a proyecto

En la ventana de Add New Item, seleccionaremos Installed>VisualC#> Data> ADO.NET Entity Data Model , luego daremos click en Add.

Ver: Imagen Add New Item (Model)

En la ventana de Entity Data Model Wizard, seleccionaremos >EF Designer from Database y daremos a Next>:

Ver: Imagen elegir modelo

En la ventana de Choose Your Data Connection, seleccionaremos New Conection

Ver: Imagen seleccionar New Conection

En la ventana de Connection Properties, añadiremos nuestro Server Name de Azure y en el apartado de Log on to the Server  ingresaremos nuestras credenciales como Use SQL Server Authentication:

Ver: Imagen SQl Authentication

El Server Name: Lo obtendremos desde el Portal de Azure en BBDD SQL > Panel> Nombre de Servidor.

User Name y Password: Datos creados al cuando creamos nuestro Servidor SQL en Azure.

Ver:

En esta ventana seleccionaremos nuestra BBDD, en nuestro caso Taller, luego daremos OK.

Ver:

En esta ventana, nos cargara todos los datos de configuracion de nuestra BBDD, ademas de los datos de conexion que serán almacenados en nuestro Web.config, daremos a Next, en la ventana de Choose Your Version seleccionaremos Entity Framework 5.0 >Next.

Ver:

En la ventana de  Choose Your  Database  Objects and Settings, seleccionaremos los objetos de nuestra BBDD, osea la tabla Clientes y Vehiculos y daremos click en Finalizar:

Ver:

De esta manera hemos creado nuestro modelo de BBDD:

Ver:

2016-02-27 18_11_45-ServicioOData – Microsoft Visual Studio.jpg

Ver:

Una vez ya añadido nuestro modelo ADO.NET Entity Data Model a nuestro Visual Studio Project, procederemos a crear un WCF Data Service, de la siguiente manera:

Ver:

Daremos click derecho sobre nuestro Project ServicioOData >Add> New Item

Ver:

En la Ventana de Add New Item > Installed > en el apartado de Busqueda escribiremos WCF y seleccionaremos WCF Data Service 5.6.4, aquí le podremos dar un nombre y luego Add.

Ver:

Utilizar  el servicio WCF hace que sea fácil la creación de OData service usando ADO.NET Entity Data Model.

Ver:

Siguiente paso, iremos a nuestra clase: WcfDataService1.svc y pasaremos a configurar:

Donde pone /* TODO: put your data source class name here */  procederemos a agregar nuestro Entities : TallerEntities (Este dato lo podremos visualizar en nuestro Web.config en connectionStrings)

En la linea: // config.SetEntitySetAccessRule(“MyEntityset”, EntitySetRights.AllRead);

la descomentamos y en el apartado “MyEntityset” lo modificaremos por “*”

 

namespace ServicioOData
{public class WcfDataService1 : DataService< /* TODO: put your data source class name here */ >
{// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
// config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
// config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}}}

Y quedaría de la siguiente manera:

namespace ServicioOData
{ public class WcfDataService1 : DataService< TallerEntities >
{// This method is called only once to initialize service-wide policies.
public static void InitializeService(DataServiceConfiguration config)
{// TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
// Examples:
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
// config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}}}

 

Ahora podremos probar nuestro servicio OData, nos posicionamos sobre nuestra clase WcfDataServiceOData y ejecutaremos en nuestro navegador, obteniendo el siguiente resultado:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xml:base="http://localhost:50233/WcfDataService1.svc/">
<workspace>
<atom:title>Default</atom:title>
<collection href="Clientes">
<atom:title>Clientes</atom:title>
</collection>
<collection href="Vehiculos">
<atom:title>Vehiculos</atom:title>
</collection>
</workspace>
</service>

Ahora procederemos a publicar nuestro Servicio OData en Azure:

En nuestro Portal de Azure > APLICACIONES WEB > + NUEVO

Seleccionaremos Proceso>Aplicacion WEB> Creacion Rapida> Crearemos una Direccion URL, un plan de Servicio de aplicaciones y configuraremos una Región, luego daremo click en Crear.

Ver:

En nuestro panel de paginas web daremos click en nuestra pagina creada ServicioOData daremo click en Descargar el perfil de publicación:

 

Tras descargar ell fichero de configuracion, daremos click derecho en nuestro Project en Visual Studio y luego Publish:

En la ventana de Publish Web > Profile > Import y luego seleccionaremo nuestro fichero descargado daremos OK

Ver:

En la ventana de Publish Web con los datos de configuracion le daremos a Publish.

Ver:

Una vez publicado, navegaremos a nuestro servicio OData en:

http://servicioodata.azurewebsites.net/WcfDataService1.scv , obtendremos el siguiente resultado:

Ver:

http://servicioodata.azurewebsites.net/WcfDataService1.svc/

This XML file does not appear to have any style information associated with it. The document tree is shown below.

<service xmlns=”http://www.w3.org/2007/app” xmlns:atom=”http://www.w3.org/2005/Atom” xml:base=”http://servicioodata.azurewebsites.net/WcfDataService1.svc/”>

<workspace>
<atom:title>Default</atom:title>
<collection href="Clientes">
<atom:title>Clientes</atom:title>
</collection>
<collection href="Vehiculos">
<atom:title>Vehiculos</atom:title>
</collection>
</workspace>
</service>

 

Consumir los datos en una Aplicacion MVC:

Creación de un Project MVC en nuestra solucion:

Click derecho en nuestra solucion > Add> New Project…

Ver:

En la ventana de Add Item seleccionaremos Installed>Visual C# > Web al que llamaremos ServicioODataWeb:

El tipo de Layaout sera MVC y daremos OK.

 

Ahora procederemos a agregar la referencia de nuestro anterior Project: Click derecho sobre nuestro MVC Add> Service Reference , y en la venta de Add Service Reference daremos click en Discover y automaticamente se nos añadirá nuestro WcfDataService1.svc y daremos OK:

Ver:

Ahora modificaremos nuestro Web.Config de nuestro Project ServicioODataWeb y añadiremos la siguiente linea, donde es la ruta de la cual consumirá los datos  desde Azure:

 

<appSettings>
<add key="ODataUri"  value="http://servicioodata.azurewebsites.net/WcfDataService1.svc"/>
</appSettings>

 

Añadiremos un Controlador en la carpeta Controller llamado HomeController y lo configuraremos de la siguiente manera:

namespace ServiceODataWeb.Controllers
{ public class HomeController : Controller
{ // GET: Home
public ActionResult Index()
{ var serviceUri = new Uri(ConfigurationManager.AppSettings["ODataUri"]);
var context = new ServiceReference1.TallerEntities(serviceUri);
var query = from p in context.Clientes.Expand("Vehiculos") select p;
var result = query.ToList();
return View(result);
}}}

 

En View daremos click derecho > Add View…

y crearemos una vista con Scaffolding de tipo Empty

Ver:

La vista la modificaremos de la siguiente manera:

@using ServiceODataWeb.ServiceReference1
@model IList<Clientes>
@{
ViewBag.Title = "Pagina Principal";
}
<div class="row">
<div class="col-md-12">
<h3>Vehiculos a Reparar</h3>
<table class="table">
@foreach (Clientes clientes in Model)
{
foreach (Vehiculos vehiculos in clientes.Vehiculos)
{
<tr>
<td>@clientes.id @clientes.nombre @clientes.apellidos</td>
<td>@vehiculos.marca</td>
<td>@vehiculos.motivo</td>
</tr>
}}
</table>
</div>
</div>

 

Definiremos nuestro ServiceODataWeb como Set as StartUp Project (Click derecho sobre nuestro Project y lo definimos como StartUp Project), para realizar una prueba ejecutaremos la Vista Index, la cual estará consumiendo los datos desde nuestra Aplicación en Azure (la cual configuramos anteriormente en el parametro: ODataUri):

Ahora procederemos a subir nuestra Web en Azure:

Siguiendo los mismo pasos de: publicar nuestro Servicio OData en Azure.

Le llamaremos ServicioODataWeb y luego daremos en Crear Aplicacion Web:

Luego procederemos a descargar el fichero de Configuracion:

 

Ahora daremos click derecho sobre nuestro Project y luego Publish

Luego daremos a Importar y añadiremos nuestro fichero de Configuración previamente descargado  desde Azure

Ahora procederemos a Publicar nuestra aplicacion MVC en Azure:

Tras la Publicación de nuestro Web en Azure, procederemos a probar su funcionamiento:

http://servicioodataweb.azurewebsites.net/Home/Index

______________________________________________________________________________________________________

Nombre y apellidos del autor/a: Jose Antonio Perez-Ruibal Del Aguila

Alumno/a del curso Microsoft MCSD

Centro: Tajamar

Año académico: 2015-2016.

Visite este enlace para acceder al código (Github)