Pensaba que habia publicado ya el acceso a OData pero parece que entre los borradores que tenia me lo salte a la hora de publicar. Si queréis saber de Odata que es os recomiendo leer el post de Marc Rubiño , su web oficial http://www.odata.org/ y el White Paper de Jose Miguel Torres donde se muestra que es y como crear nuestros propios servicios OData, podría resumirse (muy brevemente) en
OData (Open Data Protocol) es un protocolo para compartir datos diseñado para funcionar sobre la Web, utilizando URLs para
identificar cada pieza de información en un servicio, HTTP para transportar requerimientos y respuestas, y AtomPub y JSON para manejar colecciones y
para representaciones de datos.
En este post no voy a indicar como crear nuestros servicios OData sino como consumir este tipo de servicios en Windows Phone 7, para ello voy a utilizar ya servicios oData expuesto ya en la red, para ello disponemos de una lista en la pagina http://www.odata.org/producers, actualmente la lista es la siguiente
An OData Service for consuming Facebook Insights data. |
||
ebay now exposes its catalog via OData |
||
The complete netflix catalog title via OData. See the Netflix developer OData documentation for more information |
||
twitpic now exposes its Images, Users, Comments etc via OData |
||
You can now use an OData client to talk to your Windows Live resources (Photos, Contacts, Status, etc) whose REST endpoints are now OData endpoints. |
||
Information about all the sessions / speakers etc for Microsoft PDC 2010 exposed via OData |
||
Pluralsight courses are now available via an OData feed |
||
DevExpress has lots of training videos, now available via an OData feed. |
||
A social map of Vancouver Open Data. A collection of data services showing everything from parking lots to drinking fountains. |
||
This feed exposes Vancouver street parking information. |
||
Open Government Data Initiative (OGDI) is an open source data publishing solution for government agencies. |
||
OSDI is based on OGDI which in turn uses the Azure Services Platform to make it easier to publish and use a wide variety of scientific data from government agencies. |
Lots of feeds but no service document. You can however use theircustom browser. |
|
Public data from the city of Edmonton. |
||
Windows Azure Marketplace DataMarket allows producers to sell premier data to consumers, using OData. |
||
Microsoft TechEd 2010 conference session data. |
||
Microsoft MIX 2010 session data. |
||
Nerd Dinner is a website that helps nerds to meet and talk, not surprisingly it has adopted OData |
||
A community effort to extract structured information from Wikipedia and to make this information available on the Web, with full support for OData interactions on the live query services. (Powered by OpenLink Virtuoso.) |
||
Linked Open Data Cloud Cache |
Mirrors and interlinks dozens of data sets including all of data.gov, with full support for OData interactions. (Powered by OpenLink Virtuoso.) |
|
OData Test Service (Read-Only) |
This service is specially designed to introduce OData, it has a simple model and only a small number of resources. |
|
OData Test Service (Read-Write) |
As above, but this time read-write (with some restrictions). |
|
Northwind |
The famous Northwind Database exposed as an OData Service. |
|
OData Website Data |
Data, like producers and consumers, from the OData Website exposed as OData. |
|
Q&A for programmers |
||
Q&A for computer enthusiasts and power users |
||
Q&A for system administrators and IT professionals |
||
Q&A about Stack Overflow, Server Fault and Super User |
||
Telerik’s catalog of libraries, videos, Tags and Series |
||
Collection of mass transit data from a variety of transportation agencies across the United States. See developer documentationfor more details. |
||
Project time tracking software for freelancers and small to medium teams. |
||
INETA Live has an OData feed providing access to their vast library of User Group Presentations. |
||
Microsoft Pinpoint marketplace now exposes its data using OData – more details coming soon |
||
Proagora is a site that allows you to search for jobs, companies, and experts. |
Como podéis ver cada vez existen mas servicios que estan exponiendo sus API a través de este protocolo, yo voy a utilizar TwitPic para desarrollar una pequeña aplicación tonta para que veáis los pasos a seguir a la hora de consumir estos servicios.
Lo primero que necesitamos es descargarnos OData Client Library for Windows Phone 7, yo me he bajado ODataClient_BinariesAndCodeGenToolForWinPhone.zip, en este zip se encuentran dos assembly y el ejecutable DataSvcUtil.exe una vez que tenemos estos archivos y creamos nuestro proyecto.
Si ya habéis trabajado con Odata en aplicaciones de ASP¨, WPF… tendréis la tentación de añadir un Service Reference para que os cree el proxy con las clases, pero esto no funciona.
Los pasos que tenemos que seguir son añadir como referencia el assembly System.Data.Services.Client.dll de la libreria OData Client Library for Windows Phone 7
y utilizaremos el ejecutable DataSvcUtil.exe para generar el fichero proxy. Para generar esta clase deberemos de lanzar el comando
datasvcutil /uri:http://odata.twitpic.com/ /DataServiceCollection /Version:2.0 /out:TwitpicOdata.cs
donde en uri ponemos la url de acceso al servicio oData que podemos sacar de la tercera columna de la tabla puesta anteriormente, en este caso http://odata.twitpic.com y en out el fichero que queremos generar. Una vez generado el fichero lo añadimos a nuestro proyecto.
Nuestro proyecto nos quedaría con los archivos
La aplicación que vamos a construir es una lista de las paginas devueltas por el Tag kinect junto con el mensaje de Twitter, de tal manera que nos quedaría
En nuestro ViewModel declararemos la propiedad que rellenara el ListBox.
1 public DataServiceCollection<Image> ImageTags 2 { 3 get 4 { 5 return imageTags; 6 } 7 private set 8 { 9 imageTags = value; 10 RaisePropertyChanged("ImageTags"); 11 12 } 13 }
DataServiceCollection es una clase que deriva de ObservableCollection<T> y implementa IDataServiceCollection se encuentra en el assembly System.Data.Services.Client.dll y es la clase que nos devuelven los servicios OData al derivar de ObservableCollection<T> podemos realizar un binding a la propiedad ItemsSource de la lista.
1 <Grid x:Name="ContentGrid" 2 Grid.Row="1"> 3 <ListBox Margin="24,18,21,0" VerticalAlignment="Top" ItemsSource="{Binding ImageTags}" ItemTemplate="{StaticResource DataTemplateImagesTags}" Height="566"/> 4 </Grid>
Ahora solo nos queda recuperar los datos para ello siempre debemos crear un contexto que en nuestro caso es la clase TwitpicData y asignarselo a la propiedad ImageTags, una vez asignado debemos de indicar la uri con los filtros que queremos realizar, para nuestro ejemplo es muy sencillo esta uri es
/Tags(‘» + tag +»‘)/Images()?
Si ejecutamos en nuestro navegador la uri http://odata.twitpic.com/Tags(‘kinect’)/Images()? obtendremos una respuesta como esta
Una vez tenemos la Uri, solo tenemos que llamar al método LoadAsync para que realice la búsqueda, de manera que el código seria
1 private void LoadImageTags(string tag) 2 { 3 context = new TwitpicData(new Uri("http://odata.twitpic.com")); 4 imageTags = new DataServiceCollection<Image>(context); 5 6 Uri uriQuery = new Uri(@"/Tags('" + tag +"')/Images()?", UriKind.Relative); 7 8 ImageTags.LoadAsync(uriQuery); 9 10 ImageTags.LoadCompleted += (sender, args) => 11 { 12 if (args.Error != null) 13 { 14 Debug.WriteLine("Ha fallado la consulta. " + args.Error.Message); 15 } 16 17 }; 18 } 19
Ya tenemos nuestro acceso a OData y nuestra aplicación realizada
Muy buenos tus artículos sobre WP7. Estoy intentando encontrar respuesta a un problema. ¿Me podrías ayudar? El problema es simple:
Al coger el foco un textbox editable y desplegarse el SIP, se produce un scroll generalizado de toda la página, para colocer el textbox que tiene el foco justo encima del SIP, pero ésto hace que el título de la aplicación desaparezca con el scroll. ¿Sabes si existe solución a ese efecto?¿Conoces el motivo de que se produzca este efecto en toda la página?
Hola Alberto, creo que no vas a tener solución para ese efecto viene de manera predeterminada, sino seria imposible que el usuario viese lo que esta tecleando por eso se coloca encima scrollando toda la pagina. De todas maneras coloca la pregunta en el foro de WP7 igual alguien si sabe como evitar ese efecto
http://social.msdn.microsoft.com/Forums/es-ES/windowsphone7/threads
Muchas gracias por responder. Imaginaba esa respuesta, pero la duda la tenía porque viendo un dispositivo con Windows Phone 7, he observado que por ejemplo en Contactos, al Editar un Contacto y Editar la Dirección, tenían controlado ese efecto.
En fin, probaré en los foros de WP7.
Gracias de nuevo.
Se me ha ocurrido que lo podrías controlar, podrías hacer la pregunta en los forros de windows phone y así queda registrada y te contesto allí?
Ya he publicado la duda en los foros de Windows Phone, la podrás encontrar con el título
«SIP con textbox producen mal scroll» a nombre de Alberto Parrilla.
Gracias de nuevo.
Te he contestado en los foros