lunes, 9 de mayo de 2011

Manipulación de Bases de Datos con Windows Phone

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
Creación de una base de datos
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:
  1. Abrir un CMD con privilegios de admnistrador
  2. Ir a la carpeta C:\Windows\Microsoft.Net\FrameWork\V4.0
  3. 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