Tutorial de como consumir oData desde Windows Phone 7
dividido en tres pasos:- Creación de una base de datos
- Exponer el modelo de datos mediante WCF
- Consumir los datos desde un Windows Phone 7
El primer paso a realizar es crear una base de datos
Exponer el modelo de datos mediante WCF
A continuación, lo importante, exponer los datos en la nube a través de WCF DATA Service. Para ello Crear un proyecto ASP .NET Web Application desde Visual Studio 2010
En este tutorial emplearemos ADO.NET Entity para crear el modelo de datos, a continuación se detallan los pasos:
- Haccemos click derecho en la aplicación y añadimos un Nuevo Elemento
- Seleccionamos del apartado de Data, ADO.NET Entity Data Model y le damos un nombre
- Despues seleccionar a continuación Generar desde La Base De Datoa
- A continuación elegimos Nueva Conexión en la siguiente pantalla
- Introducir los datos de conexión para alcanzar la base de datos y extraer el modelo de entidades que nos permitirá posteriormente accceder a los datos.
- A continuación podremos ver todos los objetos asociados a dicha base de datos, a nosotros nos interesa seleccionar tan sólo las tablas tal y como se aprecia en la siguiente imagen:
Ahora es momento de crear el WCF DataService
Ya tenemos el modelo de entidades por lo que es momento de exponer dicho modelo a través del un WCF Dataservice para que sea posteriormente consumido por WP7.
Para ello haremos clic derecho sobre nuestra aplicación Web, seleccionaremos New Item y seleccionaremos WCF Data Service del apartado de Web:
Cuando se añade este elemento al proyecto web veremos un nuevo fichero con extensión .svc, lo primero que hemos de hacer es poner nombre de la fuente de datos y definir una regla de acceso que permita a todos acceder.
using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Data.Services.Common;
using System.Linq;
using System.ServiceModel.Web;
using System.Web;
namespace WebApplication2
{
public class WcfDataService1 : DataService<AlumnosEntities /* TODO: escriba aquí el nombre de clase del origen de datos */ >
{
// Se llama a este método una única vez para inicializar directivas aplicables a todo el ámbito del servicio.
public static void InitializeService(IDataServiceConfiguration config)
{
// TODO: establezca reglas para indicar qué operaciones de servicio y conjuntos de entidades son visibles, actualizables, etc.
// Ejemplos:
config.SetEntitySetAccessRule("*", EntitySetRights.All);
// config.SetServiceOperationAccessRule("MiOperaciónDeServicio", ServiceOperationRights.All);
}
}
}
Ejecutar el WCF Data Service
A continuación ejecutaremos el WCF Data Service para ver lo que nos devuelve, para ello pulsamos F5 desde Visual Studio 2010.
Consumir los datos de Windows Phone 7
Para poder ver los datos desde nuestro terminal Windows Phone 7 debemos crear un proxy para el servicio WCF Data Service, para ello seguiremos los siguientes pasos:
- Abrir un CMD con privilegios de admnistrador
- Ir a la carpeta C:\Windows\Microsoft.Net\FrameWork\V4.0
- Ejecutar el siguiente comando:
El siguiente paso antes de empezar a implementar el cliente WP7 es descargar Librerías OData para Windows Phone
Una vez hecho esto volveremos a Visual Studio 2010 para empezar nuestro cliente WP7.
Crearemos una aplicación WP7 del tipo Aplicacion para Windows Phone
Ahora hay que añadir la referencia a la librería OData para WP7, que hemos descargado y que tendremos en un directorio a parte.
Hacer uso de la Librería
using
System.Data.Services.Client;
using
System.Data.Services.Client;
using
SchoolModel;
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Net;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Animation;
using
System.Windows.Shapes;
using
Microsoft.Phone.Controls;
namespace
WP7ODataClient
{
public
partial
class
MainPage : PhoneApplicationPage
{
SchoolEntities schoolEntity;
List<Person> lstPersonClient;
List<SchoolModel.Person> lstpersonWcf;
public
MainPage()
{
InitializeComponent();
schoolEntity =
new
SchoolEntities(
new
Uri(
"http://localhost:14181/WcfDataService1.svc"
));
btnGetData.Click +=
new
RoutedEventHandler(btnGetData_Click);
lstPersonClient =
new
List<Person>();
lstpersonWcf =
new
List<SchoolModel.Person>();
}
void
btnGetData_Click(
object
sender, RoutedEventArgs e)
{
var query = schoolEntity.CreateQuery<SchoolModel.Person>(
"People"
);
query.BeginExecute(ar =>
{
DataLoad(ar);
}, query);
}
private
void
DataLoad(IAsyncResult result)
{
DataServiceQuery<SchoolModel.Person> query = result.AsyncState
as
DataServiceQuery<SchoolModel.Person>;
lstpersonWcf = query.EndExecute(result).ToList();
Dispatcher.BeginInvoke(() =>
{
foreach
(var r
in
lstpersonWcf)
{
lstPersonClient.Add(
new
Person {PersonID = r.PersonID.ToString() ,
LastName= r.LastName ,
FirstName = r.FirstName});
}
this
.lstDataFromCloud.DataContext = lstPersonClient ;
}
);
}
}
}
No hay comentarios:
Publicar un comentario