Dieser Artikel wurde maschinell übersetzt.

Open Data Protocol

Erstellen Sie großartige Erfahrungen auf jedem Gerät mit Imparte

Shayne Burgess

In diesem Artikel werde ich zeigen, was ich glaube, steht eine ernsthafte Daten Herausforderung in vielen Organisationen heute, und dann werde ich Ihnen zeigen wie die Open Data Protocol (Imparte) und seines Ökosystems, um diese Herausforderung zu lindern helfen kann. Dann Gehe ich weiter und zeigen, wie Imparte verwendet werden kann, um eine große Erfahrung auf Windows Phone 7, die mit der neue Imparte-Bibliothek für Windows Phone 7.1 Beta (mit dem Codenamen "Mango").

Die Daten erreichen Herausforderung

Eine interessante Sache passiert ist am Ende 2010: zum ersten Mal in der Geschichte, die Anzahl der Lieferungen Smartphone die Anzahl der PC-Lieferungen übertroffen. Eine wichtige Sache zu beachten ist, dass dies ein one-horse Rennen nicht. Es gibt viele Spieler (Apple Inc., Google Inc., Microsoft, Research In Motion Ltd und so weiter) und Plattformen (Desktop, Web, Telefone, Tabletten und mehr ständig kommen). Viele Organisationen möchten Ziel-Client-Erfahrung für alle oder die meisten dieser Geräte. Und viele Unternehmen haben auch eine Vielzahl von Daten und Diensten, die sie Client-Geräte zur Verfügung stellen möchten. Diese können lokal, über die traditionellen Webdienste verfügbar sein oder in der Wolke errichtet.

Die Kombination verschiedener große und wachsende Client-Plattformen mit eine große und ständig wachsenden Vielzahl von Diensten erstellt ein erhebliches Problem Kosten und Komplexität. Wenn Unterstützung für eine neue Clientplattform wird hinzugefügt, die Daten und Dienste oft müssen aktualisiert und dahingehend geändert, dass die Plattform unterstützt werden. Und wenn ein neuer Dienst hinzugefügt wird, müssen alle vorhandenen Clientplattformen geändert werden, um diesen Dienst zu unterstützen. Dies ist meiner Meinung nach, dass die Daten Problem erreichen. Wie können wir einen Dienst, ist flexibel genug, um die Bedürfnisse aller vorhandene Client auftritt, definieren – und neue Client-Erfahrungen, die noch noch nicht erfunden worden? Wie können wir definieren, Client-Bibliotheken und Anwendungen, die mit einer Vielzahl von Diensten und Datenquellen arbeiten können? Dies sind einige der wichtigsten Fragen, die ich hoffe, dass zeigen teilweise mit Imparte adressiert werden können.

Die Open Data Protocol

Imparte ist ein Webprotokoll zum Abfragen und Aktualisieren von Daten, die eine einheitliche Möglichkeit zum Entsperren Ihrer Daten bereitstellt. Einfach ausgedrückt, bietet Imparte ein Standardformat für die Übertragung von Daten und eine einheitliche Schnittstelle für den Zugriff auf diese Daten. Es basiert auf ATOM und JSON-Feeds und die Schnittstelle verwendet HTTP (REST) standard-Schnittstellen für das Verfügbarmachen von Abfragen und Aktualisieren von Funktionen. Imparte ist eine wichtige Komponente in das Problem des Reach-bridging da wird eine einheitliche, flexible Benutzeroberfläche, die API einmal erstellt und aus einer Vielzahl von Client-Erfahrung verwendet werden kann.

Das Imparte-Ökosystem

Die flexible Imparte-Schnittstelle, die aus einer Vielzahl von Clients verwendet werden kann wird mächtigsten gibt es eine Vielzahl von Client-Erfahrungen, die vorhandene Imparte-fähige Clients erstellt werden kann. Imparte-Client-Ökosystem entwickelte sich in den letzten Jahren auf den Punkt kommen Clientbibliotheken für die meisten Client-Geräte und Plattformen mit immer mehr zu kommen. Abbildung 1 Listet nur eine Kostprobe der Client und Server-Plattformen verfügbar zum Zeitpunkt dieser Artikel verfasst wurde (eine viel ausführlichere Liste vorhandener Imparte-Dienste ist bei odata.org/producers).

Abbildung 1 ein Sampling des Ökosystems Imparte

Clients
.NET
Silverlight
Windows Phone
WebOS
iPhone
DataJS
Excel
Tableau
Dienste
Windows Azure
SQL Azure
DataMarket
SharePoint
SAP
Netflix
eBay
Facebook
Wine.com

Ich kann im allgemeinen Ziel der aufgelisteten Dienste in Abbildung 1 mit einem beliebigen Client. Um dies praktisch zu demonstrieren zu helfen, gebe ich Beispiele für Imparte Flexibilität mit ein paar anderen Clients.

Ich verwende den Northwind-Imparte (schreibgeschützt) Beispieldienst auf odata.org am http://services.odata.org/Northwind/Northwind.svc/. Wenn Sie vertraut mit der Northwind-Datenbank, die Northwind-Datendienst gezeigt Abbildung 2 macht einfach das Northwind-Modell direkt als Imparte Dienst. Abbildung 2 zeigt die Service-Dokuments in der Northwind-Datendienst aus dem Browser; das Dokument Service macht Entitätenmengen im Dienst, die im Grunde nur die Tabellen aus der Northwind-Datenbank sind verfügbar.

The Northwind Service
Abbildung 2 die Northwind-Datendienst

Betrachten wir ein paar Beispiele für die Verwendung von Client-Bibliotheken verarbeiten und Erfahrungen mit dem Imparte von Northwind-Dienst erstellen. Im ersten Beispiel Betrachten Sie eine Clienterfahrung, die Erstellen von Code nicht erforderlich. PowerPivot-add-in für Excel bietet eine in-Memory-Analyse-Engine, die direkt von innerhalb der Excel-Schnittstelle und unterstützt das Importieren von Daten direkt aus einem Feed Imparte verwendet werden kann. Das PowerPivot-add-in enthält auch Unterstützung für das Importieren von Daten direkt aus den Windows Azure Markt DataMarket sowie eine Reihe von anderen Datenquellen.

Abbildung 3 zeigt ein Pivot-Diagramm erstellt von Products und Orders-Daten aus der Northwind-Imparte-Dienst importieren und verknüpfen das Ergebnis. Preis pro Einheit und Menge Felder Bestelldetails werden kombiniert, um einen Gesamtwert für jede Bestellung zu produzieren und dann insgesamt Durchschnittswert für jeden Auftrag angezeigt, gruppiert nach Produkt und klicken Sie dann auf eine einfache PivotChart für die Analyse angezeigt. All dies erfolgt über die integrierte Benutzeroberfläche und Tools in PowerPivot und Excel.

PowerPivot Add-In
Abbildung 3 PowerPivot-Add-In

Sehen wir uns weiter auf ein weiteres Beispiel für ein Imparte Client-Erlebnis auf einer anderen Plattform zu erstellen: iOS. Imparte-Client-Bibliothek für iOS können Sie das Erstellen von Anwendungen auf dieser Plattform (z. B. für das iPad und iPhone), die vorhandene Imparte-Dienste nutzen. Die iOS-Bibliothek für Imparte enthält ein Tool zur Codegenerierung, Odatagen, die eine Reihe von Proxyklassen aus den Metadaten für den Dienst generieren wird. Proxy-Klassen bieten Funktionen zum Generieren von Imparte URIs, eine Antwort in Client-seitige Objekte Deserialisieren ausstellenden erstellen, lesen, aktualisieren und löschen böte gegen den Dienst. Der folgende Codeausschnitt zeigt ein Beispiel für die Ausführung einer Anforderung für den Satz von Kunden aus dem Imparte-Service:

// Create the client side proxy and specify the service URL.
NorthwindCatalog *proxy =
  [[NorthwindCatalog alloc]initWithUri:@http://host/Northwind.svc];
 
// Create a query.
DataServiceQuery *query = [proxy Customers];
 
QueryOperationResponse *response = [query execute];
customers = [query getResults];

Das DataServiceQuery und QueryOperationResponse dienen zum Ausführen einer Abfrage durch generieren ein URI und gegen den Dienst auszuführen.

Windows Phone-7-Bibliothek

Als Nächstes werde ich ein weiteres Beispiel für eine Imparte-Bibliothek auf einer dritten Plattform zeigen. Ich habe einen schnellen Überblick über das Erstellen von Imparte auf anderen Plattformen, aber für diese eine werde ich tun, eine ausführliche exemplarische Vorgehensweise geben einen Einblick in was es braucht, um eine Anwendung zu erstellen. Zu diesem Zweck zeige ich Ihnen die grundlegenden Schritte erforderlich, um eine datengesteuerte Erfahrung auf Windows Phone 7 schreiben mithilfe der neuen Windows Phone 7.1 (Mango)-Tools. Für den Rest des Artikels werde ich durchlaufen die wichtigsten Überlegungen beim Erstellen einer Anwendung Windows Phone 7 und zeigen, wie die Imparte-Bibliothek verwendet wird. Die app, die ich bauen wird das gleiche Northwind-Beispiel Ziel in den beiden vorhergehenden Beispielen (PowerPivot Excel-add-in und iOS-Bibliothek) verwendeten.

Die neueste Version der Beta-Tools Windows Phone 7.1 (Mango) bietet ein umfangreiches Upgrade in der SDK-Unterstützung für Imparte. Die neue Bibliothek unterstützt eine Reihe von neuen Features, die das Imparte-fähige Windows Phone 7-Anwendungen einfacher zu erstellen. Der Visual Studio-Tools für Windows Phone 7 wurden aktualisiert, um die Generierung eines benutzerdefinierten Clientproxys basierend auf ein Ziel Imparte Service unterstützen. Für diejenigen mit vorhandenen Microsoft vertraut.NET Framework und Silverlight-Imparte-Clients aus diesem Grund auch wird vertraut sein. Um die Visual Studio-Tools verwenden, um den Proxy in einem Projekt Windows Phone 7 automatisch zu generieren, mit der rechten Maustaste des Service References-Knotens in der Projekthierarchie aus, und wählen Sie Dienstverweis hinzufügen (Beachten Sie, dass dies ist nur verfügbar, wenn die neuen Mango-Tools installiert sind). Wenn das Dialogfeld "Dienstverweis hinzufügen" angezeigt wird, geben Sie den URI des Diensts Imparte vorgesehen haben, und wählen Sie Gehe. Das Dialogfeld wird vom Dienst bereitgestellte Entitätenmengen anzuzeigen; Sie können dann geben einen Namespace für den Dienst und wählen OK. Zum erste Mal die Codegenerierung erfolgt mit Hilfe von Dienstverweis hinzufügen, wird es die Standardoptionen verwenden, aber es ist möglich, Code-Generierung, indem Sie die Option alle Dateien anzeigen im Projektmappen-Explorer die Datei .datasvcmap in den Dienstverweis öffnen und konfigurieren die Parameter weiter zu konfigurieren. Abbildung 4 zeigt das abgeschlossene Dialogfeld Dienstverweis hinzufügen mit der Liste der Entität wird verfügbar.

Using the Add Service Reference Dialog
Abbildung 4 Verwenden der Dialog für Dienstverweise hinzufügen

Ein Befehlszeilen-Tool ist auch in der Visual Studio-Tools für Windows Phone 7 enthalten, die den gleichen Code Generation Schritt durchführen kann. In beiden Fällen wird die Codegenerierung eine Clientproxyklasse (DataServiceContext) erstellen, für die Interaktion mit dem Service und eine Reihe von Proxyklassen, die die Form der Dienstleistung widerspiegeln.

LINQ-Unterstützung

Die Clientunterstützung LINQ in der neuesten Version der Tools Windows Phone 7 – ähnlich wie die LINQ-Unterstützung, die derzeit in der.NET-Client – können Sie komplexe LINQ-Abfragen schreiben und diese LINQ-Abfragen in eine Anforderung an den Imparte-Dienst über einen URI übersetzt. Die Bibliothek unterstützt auch ausgeführten vorgefertigte URIs zu einem Imparte-Dienst direkt, aber die LINQ-Syntax bietet eine viel sauberer und verbirgt die Komplexität der Erstellung gültige URIs für Imparte. Abbildung 5 zeigt ein Beispiel für die Verwendung von LINQ-Unterstützung eine LINQ-Ausdruck zu erstellen, die für alle Produkte in der Northwind-Datenbank abfragt, die Einheiten auf Lager haben.

Abbildung 5 Ausführen einer LINQ-Abfrage

public void LoadData()
{
  // Create a Northind Entities context and set the URL of the service.
NorthwindEntities svcContext = new NorthwindEntities(
    new Uri("http://services.odata.org/Northwind/Northwind.svc")
  );
            
  // Create a DataServiceCollection to hold the results of the query.
// This collection implements INotifyCollectionChanged and can be bound in XAML.
DataServiceCollection<Product> ProductsCollection =
    new DataServiceCollection<Product>( svcContext );
           
  // Execute a LINQ query for all products with some units in stock and
  // include the supplier.
var q = from p in svcContext.Products.Expand("Supplier")
    where p.UnitsInStock > 0
    select p;
 
  // Asynchronously execute the query and load the results.
ProductsCollection.LoadAsync(q);
}

Verwenden Sie das Tool Dienstverweis hinzufügen, die zuvor beschrieben, wird ein Clientkontext-Proxy für Sie generiert, die Erstellung von LINQ-Abfragen unterstützt.

Die Imparte-Bibliothek enthält ein Imparte-spezifische Sammlungstyp DataServiceCollection <T>, die INotifyCollectionChanged implementiert. Wenn eine DataServiceCollection verwendet wird, um Entitäten auf dem Client zu speichern, die Entitäten zu Elementen der Benutzeroberfläche in XAML gebunden werden können und werden automatisch Änderung protokolliert. Aktualisierungen für diese nachverfolgten Elemente können auf dem Clientkontext auf den Dienst über einen Aufruf von SaveChanges abgelegt werden. Abbildung 6 einige grundlegende XAML-Bindung mithilfe der DataServiceCollection-Klasse zeigt – die Proxyklassen generiert mithilfe der Tools INotifyPropertyChanged implementiert und wird die Änderungen in der Benutzeroberfläche angezeigt.

Abbildung 6 XAML-Datenbindung

<ListBox x:Name="ProductListBox" Margin="0,0,-12,0"
  ItemsSource="{Binding Products}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel Margin="0,0,0,17" Width="432" Height="78">
        <TextBlock Text="{Binding ProductName}" TextWrapping="NoWrap"
          Style="{StaticResource PhoneTextExtraLargeStyle}"/>
        <TextBlock Text="{Binding Supplier.CompanyName}"
          TextWrapping="Wrap" Margin="12,-6,12,0"
          Style="{StaticResource PhoneTextSubtleStyle}"/>
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

Es ist möglich, die Verwendung von DataServiceCollection die Generierung von Code deaktivieren, wenn Sie planen, um die Änderungsnachverfolgung manuell verwalten. Dies kann die Leistung Ihrer Anwendung etwas erhöhen, da die Benachrichtigungsereignisse wird nicht ausgelöst werden, wenn diese Funktion nicht verwendet wird.

Die Ausführung einer Abfrage gegen ein Imparte-Service und Materialisierung der Ergebnisse von umfasst eines Aufrufs der Netzwerkstapel auf Windows Phone 7, der immer einen asynchronen Aufruf sein muss. Methoden der DataServiceContext, "BeginExecute" und "EndExecute", ausführen asynchron eine Anforderung an den Dienst mithilfe des IAsyncResult-Musters. Das IAsyncResult-Muster kann manchmal umständlich zu verwenden, sein, damit eine Methode namens LoadAsync DataServiceCollection die meisten Details der asynchronen Ausführung ausgeblendet. Die LoadAsync-Methode wird asynchron DataServiceCollection das Ergebnis der Abfrage hinzugefügt und lösen INotifyCollectionChanged Ereignisse für die Benutzeroberfläche selbst neu aufzufüllen. Die Auflistung enthält auch ein LoadCompleted-Ereignis, das, abonniert werden kann, die aufgerufen werden würde, wenn die Daten asynchron geladen.

Markierung als veraltet

Eine Windows Phone 7 app wird manchmal eine Benachrichtigung vom Betriebssystem erhalten, die es braucht zu deaktivieren, sodass das Betriebssystem mit einer anderen Anwendung aktivieren können. Dies kann z. B. eintreten, wenn der Benutzer die Home-Taste auf dem Telefon auswählt oder wenn der Benutzer einen eingehenden Anruf erhält. Die Anwendung wird nicht immer in der Mango Beta-Version von Windows Phone 7 deaktiviert werden, da die Funktion fast Application switching oft das Betriebssystem zu einer anderen Anwendung wechseln, ohne die aktuelle Datenbank zunächst deaktivieren kann. Als die Anwendung vom Betriebssystem deaktivieren gesagt, die app hat die Möglichkeit, den aktuellen Zustand lokal speichern, so dass bei es erneut aktiviert wurde – das kann passieren, wählt der Benutzer anschließend die Schaltfläche zurück zum Beispiel – die app seinen vorherigen Zustand wiederherstellen kann und der Benutzer kann fortsetzen, was er Tat, bevor die Anwendung deaktiviert wurde. Dies wird als Tombstoning bezeichnet. Dies kann besonders nützlich in einer Anwendung, die Daten aus einer externen Datenquelle sein, da die Markierung als veraltet die app erspart gehen mit dem Netzwerk und Bandbreite verwenden, um die Daten aus der externen Datenquelle erneut herunterzuladen.

Veraltet Windows Phone 7 erfolgt durch den Zustand der Anwendung in eine Reihe von Zeichenfolgen in einem Wörterbuch zu serialisieren. Imparte-Client-Bibliothek für Windows Phone 7 hat Dienstprogramme, die den aktuellen Zustand durch Methoden, die Serialisieren bzw. Deserialisieren Sie ein DataServiceContext und eine Reihe von DataServiceCollections können zu serialisieren. Der Beispielcode in Abbildung 7 zeigt ein Beispiel für diese Methoden verwenden, um eine Zeichenfolge zu erstellen, die den aktuellen Zustand darstellt. Windows Phone 7-Anwendungen müssen die Methoden Application_Activated und Application_Deactivated implementieren, die vom Betriebssystem verwendet werden, um anzugeben, wann die Anwendung aktivieren oder deaktivieren sollten. Die Serialize und deserialize DataServiceContext Methoden von diesen Methoden verwendet werden können.

Abbildung 7 Serialisierung bzw. Deserialisierung von DataServiceContext

// This method will serialize the local state to be stored
// when the app is deactivated.
public string Serialize()
{
  var saveItems = new Dictionary<string, object>();
  saveItems.Add("Products", ProductsCollection);
  return DataServiceState.Serialize(svcContext, saveItems);
}
 
// This method will deserialize the local state to be restored
// when the app is reactivated.
public void Deserialize (string state)
{
  DataServiceState dsState= DataServiceState.Deserialize(state);
  svcContext = dsState.Context as NorthwindEntities;
  if (dsState.RootCollections.ContainsKey("Products"))
  {
    ProductsCollection = dsState.RootCollections["Products"] as
     DataServiceCollection<Product>;
  }
}

Anmeldeinformationen

Darauf werde ich eine endgültige aber wichtiger Teil eine Anwendung Imparte auf Windows Phone 7.1 (Mango) erstellen: Anmeldeinformationen für den Dienst Imparte. In vielen Fällen ist der betreffenden Dienst hinter ein Autorisierungsschema Daten vor unbefugtem Zugriff zu schützen. Unterstützung wurde in den Mango-Tools die Credentials-Eigenschaft auf den HTTP-Stapel festlegen, wenn Aufrufe an den Imparte-Dienst mithilfe der Clientbibliothek hinzugefügt. Die Eigenschaft nimmt eine Implementierung der ICredentials-Schnittstelle und übergibt diese Schnittstelle direkt an den HTTP-Stapel. Der folgende Codeausschnitt zeigt die Grundlagen des Erstellens "DataServiceContext" nachverfolgt und die Credentials-Eigenschaft mit einem Username, Password und Domain-Namen festlegen:

 

// This method will serialize the local state to be stored
// when the app is deactivated.
public MainViewModel()
{
  // Create the data service context.
NorthwindEntities serviceContext = new NorthwindEntities(
    new Uri("http://services.odata.org/Northwind/Northwind.svc"));
 
  // Specify the basic auth credentials.
serviceContext.Credentials = new NetworkCredential(Username, Password, Domain);
}

Weitere Informationen

Dieser Artikel enthält eine Zusammenfassung der Imparte, das Ökosystem, das es und eine große mobile app Erfahrungen bauen mit den Imparte-Client für Windows Phone 7.1 (Mango) Beta – Exemplarische Vorgehensweise erstellt wurde. Besuchen Sie für Weitere Informationen über Imparte, odata.org. Um weitere Informationen zu WCF Data Services zu erhalten, finden Sie unter bit.ly/pX86x6 oder das WCF-Datendienste Blog unter blogs.msdn.com/astoriateam.

Shayne Burgess ist Programmmanager in der Business Platform Division bei Microsoft, die speziell auf WCF Data Services sowie der Open Data Protocol. Er regelmäßig Blogs auf dem WCF-Datendienste Blog unter blogs.msdn.com/astoriateam.

Dank der folgenden technischen Experten für die Überprüfung dieses Artikels: Glenn Gailey