Diese Website verwendet Cookies für Analysen, personalisierte Inhalte und Werbung. Indem Sie diese Website nutzen, erklären Sie sich mit dieser Verwendung einverstanden. Weitere Informationen
Microsoft Logo
Gray Pipe
  • Developer Network
    • Downloads
      • Visual Studio
      • SDKs
      • Testsoftware
    • Programme
      • Abonnements
      • Students
      • ISV
      • Start-ups
      • Veranstaltungen
    • Community
      • Magazine
      • Foren
      • Blogs
      • Channel 9
    • Dokumentation
      • Microsoft API- und Referenzkatalog
      • Entwicklungscenter
      • Zurückgezogene Inhalte
    • Code
Developer Network Developer
MSDN-Abonnements
Tools herunterladen
Magazin
  • Ausgaben und Downloads
    • Alle Ausgaben
    • 2109
      • January 2019
    • 2018
      • Connect(); 2018
      • Dezember 2018
      • November 2018
      • Oktober 2018
      • September 2018
      • August 2018
      • Juli 2018
      • Juni 2018
      • Mai 2018
      • April 2018
      • März 2018
      • Februar 2018
      • Januar 2018
    • 2017
      • Dezember 2017
      • November 2017
      • Oktober 2017
      • September 2017
      • August 2017
      • Juni 2017
      • Mai 2017
      • April 2017
      • März 2017
      • Februar 2017
      • Januar 2017
    • 2016
      • Dezember 2016
      • Connect(); 2016
      • November 2016
      • Oktober 2016
      • September 2016
      • August 2016
      • Juli 2016
      • Juni 2016
      • Mai 2016
      • April 2016
      • März 2016
      • Februar 2016
      • Januar 2016
    • 2015
      • Dezember 2015
      • November 2015
      • SONDERAUSGABE 2015 ZU WINDOWS 10
      • Oktober 2015
      • September 2015
      • August 2015
      • Juli 2015
      • Juni 2015
      • Mai 2015
      • April 2015
      • März 2015
      • Februar 2015
      • Januar 2015
    • 2014
      • MSDN Magazin Sonderausgabe 2014
      • MSDN Magazin Dezember 2014
      • MSDN Magazin November 2014
      • MSDN Magazin Oktober 2014
      • MSDN Magazin September 2014
      • MSDN Magazin August 2014
      • MSDN Magazin Juli 2014
      • MSDN Magazin Juni 2014
      • MSDN Magazin Mai 2014
      • MSDN Magazin April 2014
      • MSDN Magazin März 2014
      • MSDN Magazin Februar 2014
      • MSDN Magazin Januar 2014
    • 2013
      • MSDN Magazin Dezember 2013
      • MSDN Magazin November 2013
      • MSDN Magazin Oktober 2013
      • MSDN Magazin September 2013
      • MSDN Magazin August 2013
      • MSDN Magazin Juli 2013
      • MSDN Magazin Juni 2013
      • MSDN Magazin Mai 2013
      • MSDN Magazin April 2013
      • MSDN Magazin März 2013
      • MSDN Magazin Februar 2013
      • MSDN Magazin Januar 2013
    • 2012
      • MSDN Magazin Dezember 2012
      • MSDN Magazin November 2012
      • MSDN Magazin Oktober 2012
      • MSDN Magazin Windows 8 – Sonderausgabe 2012
      • MSDN Magazin September 2012
      • MSDN Magazin August 2012
      • MSDN Magazin Juli 2012
      • MSDN Magazin Juni 2012
      • MSDN Magazin Mai 2012
      • MSDN Magazin April 2012
      • MSDN Magazin März 2012
      • MSDN Magazin Februar 2012
      • MSDN Magazin Januar 2012
      • MSDN Magazine-Ausgaben von 2012
    • 2011
      • MSDN Magazin Dezember 2011
      • MSDN Magazin November 2011
      • MSDN Magazin Oktober 2011
      • MSDN Magazin September 2011
      • MSDN Magazin August 2011
      • MSDN Magazin Juli 2011
      • MSDN Magazin Juni 2011
      • MSDN Magazin Mai 2011
      • MSDN Magazin April 2011
      • MSDN Magazin März 2011
      • MSDN Magazin Februar 2011
      • MSDN Magazin Januar 2011
    • 2010
      • MSDN Magazin Dezember 2010
      • MSDN Magazin November 2010
      • MSDN Magazin Oktober 2010
      • MSDN Magazin September 2010
      • MSDN Magazin August 2010
      • MSDN Magazin Juli 2010
      • MSDN Magazin Juni 2010
      • MSDN Magazin Mai 2010
      • MSDN Magazin April 2010
      • MSDN Magazin März 2010
      • MSDN Magazin Februar 2010
      • MSDN Magazin Januar 2010
    • 2009
      • MSDN Magazin Dezember 2009
      • MSDN Magazin November 2009
      • MSDN Magazin Oktober 2009
      • MSDN Magazin September 2009
      • MSDN Magazin August 2009
      • MSDN Magazin Juli 2009
      • MSDN Magazin Juni 2009
      • MSDN Magazin Mai 2009
      • MSDN Magazin April 2009
      • MSDN Magazin März 2009
      • MSDN Magazin Februar 2009
      • MSDN Magazin Januar 2009
  • Abonnieren
  • Artikel einsenden
search clear
Es tut uns leid. Der angeforderte Inhalt wurde entfernt. Sie werden in 1 Sekunde automatisch umgeleitet.
Ausgaben und Downloads 2012 MSDN Magazin Juli 2012 Datenpunkte: Erstellen und Nutzen von in JSON-formatierten OData

Dieser Artikel wurde maschinell übersetzt.

Data Points

Erstellen und Verwenden von JSON-Format promoveaza

Julie Lerman

Julie Lerman In meinem Artikel vom Juni "Daten binden promoveaza im Web Apps mit Knockout.js" (msdn.microsoft.com/magazine/jj133816), ich hatte Spaß mit Knockout.js und promoveaza. Als ich erfuhr wie an Daten binden Knockout zu den Ergebnissen des promoveaza Service, fand ich auch mehr über promoveaza und JSON als ich vorher gewußt hätte. Im Artikel dieses Monats werde ich mein Schwerpunkt verlagern, auf JSON aus promoveaza konsumieren und JSON-freundliche WCF Data Services erstellen.

Ich zeige Ihnen, wie JSON direkt aus JavaScript zu nutzen, wie das promoveaza JavaScript SDK (genannt Datajs) nutzen und so stellen Sie sicher, Ihren Feed ist flexibel genug, um jede Art von clientseitigen Programmierung zu unterstützen, die JSON benötigen.

Promoveaza ist eine Spezifikation dafür, dass Daten-Service-Consumern auf ein konsistentes Verhalten von den Diensten verlassen können, die sie verzehren. Eine der Regeln der Spezifikation ist, dass promoveaza Ergebnisse Ausgabe standardmäßig im ATOM-Format (die eine bestimmte Art der Formatierung XML), und dass es auch ausgeben kann im JSON-Format Ergebnisse.

Wie die promoveaza-Spezifikation entwickelt, stellt es neue Features, die Sie Benutzer Ihres Dienstes nutzen können. Nachdem ich die verschiedenen Möglichkeiten um zu konsumieren und JSON in promoveaza-Feeds zu erstellen diskutieren, ich werde dafür sorgen, dass Sie verstehen, wie bevorstehende Änderungen an den promoveaza Spezifikation Willen beeinflussen promoveaza und was Sie heute tun können, um vorbereitet zu sein. Verfügbarmachen ein Kunden mit dem folgenden Schema in meinen Dienst zunächst:

C#
Kopieren
public class Customer
{
  public int Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public string AccountNumber { get; set; }
}

Standardmäßig ein Kunden-Ergebnis von meinem Service wäre ATOM-Daten und Aussehen (wie von einem Browser formatiert), wie in Abbildung 1.


Abbildung 1 Ergebnisse als ATOM

Das gleiche Ergebnis ausgeben wie JSON wäre:

JavaScript
Kopieren
{"d":[
{"__metadata":{"id":"http://localhost:43447/DataService.svc/Customers(1)",
               "uri":"http://localhost:43447/DataService.svc/Customers(1)",
               "type":"DataAccessMSDNJuly2012.Customer"},
  "Id":1,
  "FirstName":"Julie",
  "LastName":"Lerman",
  "AccountNumber":"A123"}
]}

Wenn Sie mit dem raw ATOM oder JSON-Ergebnisse arbeiten, kann das Format der Ausgabe einen großen Unterschied in der Leichtigkeit der Codierung machen. Beispielsweise, wenn Sie den Feed in JavaScript verbraucht sind, ist es viel einfacher direkt mit ein JSON-Objekt zu arbeiten, als zu analysieren von XML.

Es gibt zwei Möglichkeiten, um sicherzustellen, Ihre Ergebnisse zurückkommen im JSON-Format: Sie können im Anforderungsheader Anwendung/Json angeben oder Sie können einen promoveaza-Abfrageparameter hinzufügen. Beim Verfassen Anfragen im Fiddler testen es ist ziemlich leicht um eine Kopfzeile hinzuzufügen, wie im Abbildung 2.


Abbildung 2 Angabe von JSON in der Anfrage-Header

Sie können auch einen Header in JQuery hinzufügen, wenn Sie Ihre Anfrage erstellen, aber dank ein paar andere Optionen, Sie nicht auf diese Länge zu gehen müssen. Eine dieser Optionen ist Datajs, die JavaScript-Bibliothek für promoveaza, zu verwenden, die viele andere Vorteile bietet für Programmieren mit promoveaza auch. Eine weitere Möglichkeit ist die Verwendung den promoveaza-Query-Parameter, $Format.

JSON standardmäßig mit Datajs zu erhalten

Sie können Datajs von datajs.codeplex.com. Seit der Zeit des Schreibens ist die aktuelle Version 1.0.3.

Wenn Sie Visual Studio verwenden, können Sie Datajs direkt an das Projekt mit Hilfe des NuGet Package Managers hinzufügen. NuGet fügen einen Ordner "Scripts" zu Ihrem Projekt und setzen Sie die aktuelle Version des Datajs (Datajs-1.0.3.js) und seine Verwandten min-Script-Dateien in diesem Ordner.

Skript-Bibliothek enthält eine Klasse namens promoveaza, das erleichtert das Lesen und Schreiben von promoveaza richtlinienkonformen Feeds und andere Features bietet. Obwohl Sie leicht einen Header in der Anforderung über die OData.read-Funktion einfügen können, ist es nicht notwendig. Standardmäßig werden Datajs automatisch Header hinzufügen, denn wenn Sie diese Bibliothek verwenden, es wahrscheinlich ist, Sie wollen JSON.

Hier ist einige JavaScript, die OData.read aufruft, übergibt die Uri, die meine Datendienstabfrage darstellt, und gibt an, was mit den Ergebnissen zu tun (in diesem Fall ich bin speichern die Ergebnisse in einer Variablen mit dem Namen Customer):

HTML/XHTML
Kopieren
<script src="Scripts/datajs-1.0.2.js" type="text/javascript"></script>
<script type="text/javascript" charset="utf-8">
  var customer;
  OData.read({ requestUri:"http://localhost:43447/DataService.svc/Customers?$top=1"
             },
             function (data, response) {
               customer = data.results[0];
             },
             function (err) {
               alert("Error occurred: " + err.message);
             });
</script>

Wie ich durch dieses Skript Debuggen, ich kann sehen, dass das Ergebnis der Abfrage ein Objekt, wie im Abbildung 3.


Abbildung 3 Debug View von JSON-Ergebnis

Mit Fiddler ausgeführt, um HTTP-Datenverkehr zu erfassen kann ich sehen, dass der Accept-Header angeben Anwendung/Json, Teil dieser Anforderung war.

Wenn Sie ein PHP-Entwickler sind, sollten Sie die zugehörige Bibliothek, promoveaza SDK für PHP Auschecken (odataphp.codeplex.com). Ebenso wie die Datajs-Bibliothek für JavaScript-Entwickler, sichert die PHP-SDK die Ergebnisse relevant sind. Aber in diesem Fall es tut dies durch ATOM-Format anfordern und dann die resultierenden ATOM-Daten in PHP Objekte materialisieren.

JSON mit dem $Format Parameter anfordern

Nicht jeder braucht JSON wird die Datajs-Bibliothek nutzen. Aber das bedeutet nicht notwendigerweise, dass Sie zu den Anfrage-Header verwenden, um JSON bitten. Die promoveaza Spec hat auch ein Query-Parameter, $Format, die Json als einen seiner Werte akzeptiert.

Hier ist die geänderte Uri, die JSON direkt Anfragen:

Kopieren
http://localhost:43447/DataService.svc/Customers (1)?$ Format = Json


Sie können jede Abfrage $Format-Parameter hinzufügen. Ich bin hier die Format-Anforderung mit einem Filter kombinieren:

Kopieren
http://localhost:43447/DataService.svc/Customers?$Filter=FirstName Eq 'Julie' &$ Format = Json


Zwingt einen Datendienst, das $Format Parameter zu Ehren

Obwohl dieses Format-Parameter verwenden, um anzufordern, dass JSON ist Teil der promoveaza Spezifikation, weiß nicht alle Daten-Dienste wie den Parameter verarbeitet.In der Tat, wenn Sie einen WCF-Datendienst .net erstellen, gibt es ATOM standardmäßig.Während die $-Format akzeptieren = Json Parameter, ATOM wird noch in der Antwort zurückgegeben.Aber einige Entwickler im Team promoveaza haben gemeinsam eine einfache Lösung können Sie in Ihrer Anwendung, können hinzufügen, WCF Data Services verarbeiten die $ Befehl formatieren und JSON zurückgeben.

Die Erweiterung erfolgt in Form von einer Klasse namens JSONPSupportInspector und ein Attribut namens JSONP­SupportBehavior.Beide Klassen nutzen Logik von System.Component­Modell.Sie können die Klassen direkt zu Ihrem Projekt hinzufügen oder Erstellen einer Assembly aus zu verweisen.Sobald Ihre WCF Data Service Zugriff auf diese Klassen hat, alle Sie tun müssen, ist der Service-Klasse das JSONPSupportBehavior-Attribut hinzufügen wie folgt:

C#
Kopieren
[JSONPSupportBehavior]
public class DataService : DataService<SalesContext>
{
  public static void InitializeService(DataServiceConfiguration config)
  {
    config.SetEntitySetAccessRule("Customers", EntitySetRights.All);
    config.SetEntitySetAccessRule("Orders", EntitySetRights.All);
  }

Mit diesem Attribut an Stelle meinen Dienst reagiert auf die $Format = Json Parameter, wenn ich es in die Abfrage hinzufügen, und mein Service wird JSON zurück.

Ich schreibe diese Spalte auf den Fersen der April 2012 Version von WCF Data Services 5, die immer noch verlangt, dass Sie explizit die JSONP-Unterstützung in Ihrem Data Services hinzufügen. Wenn Sie eingewickelt in der WCF Data Services-API in der Zukunft sehen möchten, können Sie hinzufügen, eine Abstimmung, um des Teams UserVoice Feature Vorschläge an bit.ly/ImeTQt.

JSON-Unterstützung und promoveaza Versionen

Die promoveaza-Spezifikation liegt derzeit bei Version 2 und weiterentwickelt. Arbeit an Version 3 ist im Gange, mit Beta Dokumentation bereits unter OData.org. Standardmäßig wird Ihr WCF-Datendienst Version 1 Ziel. Leider funktioniert standardmäßig nicht, wenn Sie eine promoveaza-Version 2-Funktion, z. B. serverseitige Paging verwenden möchten, die in WCF Data Services verfügbar ist. Ich habe meinen Dienst zeigen die SetEntitySetPageSize Konfiguration hinzugefügt:

C#
Kopieren
public static void InitializeService(DataServiceConfiguration config)
  {
    config.SetEntitySetAccessRule("Customers", EntitySetRights.All);
    config.SetEntitySetAccessRule("Orders", EntitySetRights.All);
    config.SetEntitySetPageSize("Customers", 3);
  }

Mit dieser Version 2-Funktion vorhanden wird der Dienst eine Ausnahme auslösen und Ihnen sagen, dass MaxProtocolVersion größer als Version 1 angeben. Hier ist der Fehler der SetEntitySetPageSize-Konfiguration zugeordnet:

"Serverseitiges Paging kann nicht werden verwendet, wenn die MaxProtocol­Version des Datendiensts auf DataServiceProtocolVersion.V1 festgelegt ist."

Um das Problem zu beheben, ist es leicht genug, um die Version im Dienst-Code festgelegt:

C#
Kopieren
public static void InitializeService(DataSeviceConfiguration config)
  {
    config.SetEntitySetAccessRule("Customers", EntitySetRights.All);
    config.SetEntitySetAccessRule("Orders", EntitySetRights.All);
    config.SetEntitySetPageSize("Customers", 3);
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
  }

Und in diesem Fall ist es immer noch möglich, JSON-Ausgabe in der Anfrage-Header oder mit Hilfe des Format-Parameters $ im Uri anzufordern.

Sie können jedoch Ihren Dienst aufwärtskompatibel, sein Design festlegen der MaxProtocolVersion auf DataServiceProtocol­Version.V3.Aber in Version 3 wird das JSON-Format zu einem strafferen Ausgabeformat als JSON Light verändert werden (bit.ly/JrM6RQ).Dies kann ein großes Problem sein, wenn die Clientanwendung nicht optimierte JSON-Format erwartet.Aus der Perspektive der verbrauchende Anwendung, erscheint es, dass die Anforderung für JSON ignoriert wurde da ATOM zurückgegeben wird und nicht JSON.

Denn Ihr Kunde muss explizit die ausführlichere Anforderungsformat oder geben Sie die promoveaza-Version zum Ziel ist.Ohne diese Regeln erfüllt wird der Dienst ATOM zurückgeben.Daher müssen Sie eine oder die andere der erforderlichen Aufgaben um JSON Ergebnisse zu bekommen, wenn der Dienst auf Version 3 festgelegt ist tun.

Hier ist eine Anfrage-Header geändert, um speziell das ausführliche Format der JSON anfordern:

Kopieren
Akzeptieren: Anwendung/Json; promoveaza = verbose


Und hier ist ein Beispiel für den Header mit einer bestimmten Anforderung, dass die Antwort promoveaza Version 2 Formatierung verwenden:

Kopieren
Akzeptieren: Anwendung/json
Kopieren
MaxDataServiceVersion: 2.0


Was passiert, wenn Sie verwenden das $Format = Json Parameter in der Abfrage anstelle von JSON in der Kopfzeile anfordern?Auch der Service wird nicht begreifen die Anforderung und werde, erhalten Sie eine Fehlermeldung, die besagt, dass der MIME-Typ nicht unterstützt wird.In diesem Fall müssen Sie die MaxDataServiceVersion in Ihre Anforderungsheader aufnehmen.

Jedoch, wenn Sie Datajs verwenden, Sie brauchen nicht zu sorgen.Beginnend mit Version 1.0.3, die Bibliothek ist die Notwendigkeit für die Versionsinformationen und liefert sie in ihren Anforderungen.In diesem Ort Ihr Service ist bereit für promoveaza Version 3 und Verbraucher haben die Flexibilität, unabhängig davon, welche Versionsformat anfordern, sie mögen.

JSON in der Pipeline promoveaza

Dank seiner optimierten Format ist JSON eine zunehmend wichtige Format für Entwickler.Vielleicht erinnern Sie sich, dass auch einige der neuen Dokument Datenbanken ich über in der Spalte November 2011 Datenpunkte schrieb "was zum Teufel Dokument Datenbanken sind?" (MSDN.Microsoft.com/Magazine/hh547103), Speicherdaten über JSON oder einige Torsion auf JSON.

Wenn Sie Artikel des letzten Monats Datenpunkte überprüfen, finden Sie Beispiele für Lesen und Schreiben von Datendiensten mit JSON und Knockout.js.

Als wir in ein Zeitalter wenn mehr Anwendungen getrennt sind bewegen, werden Sie schätzen die Möglichkeit, promoveaza als JSON verbrauchen (entweder ausführliche oder effizienter neuen Format).Und wenn Sie Dienste erstellen, Ihre Konsumenten werden sicherlich dankbar, wenn Sie ihnen Zugriff auf Ihre Daten auf diese Weise erleichtern können.

Julie Lerman ist Microsoft MVP, .NET-Mentor und Unternehmensberaterin und lebt in den Bergen von Vermont. Sie hält bei User Groups und Konferenzen in der ganzen Welt Vorträge zum Thema Datenzugriff und anderen Microsoft .NET-Themen. Julie Lerman führt einen Blog unter thedatafarm.com/blog und ist die Verfasserin von "Programming Entity Framework" (Programmieren des Entity Framework) (O’Reilly Media 2010) und "Programming Entity Framework: Code First" (Programmieren des Entity Framework: zuerst der Code) (O’Reilly Media, 2011). Folgen Sie ihr auf Twitter unter twitter.com/julielerman.

Unser Dank gilt dem folgenden technischen Experten für die Durchsicht dieses Artikels: Alejandro Trigo

 

MSDN Magazine Blog

14 Top Features of Visual Basic 14: The Q&A
Wednesday, Jan 7
Big Start to the New Year at MSDN Magazine
Friday, Jan 2

More MSDN Magazine Blog entries >


Current Issue


November 2018

Browse All MSDN Magazines


Subscribe to the MSDN Flash newsletter Subscribe to MSDN Flash newsletter


Receive the MSDN Flash e-mail newsletter every other week, with news and information personalized to your interests and areas of focus.

Folgen Sie uns
  • https://www.facebook.com/microsoftdeveloper
  • https://twitter.com/msdev
  • https://plus.google.com/111221966647232053570/
Registrieren Sie sich für den MSDN Newsletter
Ist diese Seite hilfreich?
Ihr Feedback ist uns wichtig.
Teilen Sie uns Ihre Meinung mit.
Weiteres Feedback?
1500 verbleibende Zeichen
Vielen Dank!
Vielen Dank für Ihr Feedback.

Entwicklungscenter

  • Windows
  • Office
  • Visual Studio
  • Microsoft Azure
  • Mehr...

Lernressourcen

  • Microsoft Virtual Academy
  • Channel 9
  • MSDN Magazine

Community

  • Foren
  • Blogs
  • CodePlex

Support

  • Selbsthilfe

Programme

  • BizSpark (für Startups)
  • Microsoft Imagine (for students)
Deutschland (Deutsch)
  • Impressum
  • Newsletter
  • Datenschutz & Cookies
  • Nutzungsbedingungen
  • Marken
logo © 2019 Microsoft