!!!Listing 1: Das OData-XML-Format ist geschwätzig. - http://localhost:87/WWWingsDataService.svc/Flug Flug 2012-07-25T08:09:43Z - http://Server/WWWingsDataService.svc/Flug(190) <updated>2012-07-25T08:09:43Z</updated> - <author> <name /> </author> - <content type="application/xml"> - <m:properties> <d:FlugNr m:type="Edm.Int32">190</d:FlugNr> <d:Abflugort>Rom</d:Abflugort> <d:Zielort>Essen/Mülheim</d:Zielort> <d:Datum m:type="Edm.DateTime">2012-10-22T20:07:58.000</d:Datum> <d:FreiePlaetze m:type="Edm.Int16">40</d:FreiePlaetze> </m:properties> </content> </entry> - <entry> <id>http://Server/WWWingsDataService.svc/Flug(223)</id> <category term="WWWings6Model.Flug" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> <link rel="edit" title="Flug" href="Flug(223)" /> !!!Listing 2: Definition eines WCF Data Service using System; using System.Collections.Generic; using System.Data.Services; using System.Linq; using System.Linq.Expressions; using System.ServiceModel.Web; using System.Web; using de.WWWings.GO_STE; namespace WWWings_EF4_AppServer {public class WWWingsWebDataService : DataService<WWWings6STE> {public static void InitializeService(DataServiceConfiguration config) {config.DataServiceBehavior.MaxProtocolVersion = System.Data.Services.Common.DataServiceProtocolVersion.V3; config.UseVerboseErrors = true; config.SetEntitySetAccessRule("Flug", EntitySetRights.All); config.SetEntitySetAccessRule("Person", EntitySetRights.AllRead | EntitySetRights.WriteMerge | EntitySetRights.WriteReplace); config.SetEntitySetAccessRule("Passagier", EntitySetRights.WriteAppend); config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);} [QueryInterceptor("Flug")] public Expression<Func<Flug, bool>> FilterFluege() {if (HttpContext.Current != null && HttpContext.Current.User.IsInRole("FlugAdmins")) return o => true; else return o => o.Abflugort.StartsWith("R") == true && o.Datum > DateTime.Now && o.FreiePlaetze > 0;} [WebGet] public int Count(string Stadt) {if (string.IsNullOrEmpty(Stadt)) {throw new ArgumentNullException("Stadt", "Stadt darf nicht leer sein!");} return (from f in this.CurrentDataSource.Flug where f.Abflugort == Stadt select f).Count();} [WebGet] public List<string> GetOrte() {return (from f in this.CurrentDataSource.Flug select f.Abflugort).Distinct().ToList();} [WebGet] public int GetCount(string where) {return String.IsNullOrEmpty(where) ? CurrentDataSource.Flug.Count() : CurrentDataSource.Flug.Where(where).Count();} [WebGet] public IQueryable<de.WWWings.GO_STE.Flug> FluegeVon(string Stadt) {if (string.IsNullOrEmpty(Stadt)) {throw new ArgumentNullException("Stadt", "Stadt darf nicht leer sein!");} return (from f in this.CurrentDataSource.Flug where f.Abflugort == Stadt select f);} } } !!!Listing 3: OData-Client mit .NET und der WCF Data Service Clients Library /// <summary> /// Lesen und Ändern von Datensätzen über einen Data Service /// </summary> public static void DSClient_Lesen_Aendern() { // DataService Client-Kontext instanziieren unter Angabe der OData-Dienst-Basis-URL de.WWWings.ConsoleClient.DatenDienst.WWWings6STE DB = new de.WWWings.ConsoleClient.DatenDienst.WWWings6STE(new Uri("http://Server/WWWingsDataService.svc/")); // Abfrage definieren in LINQ var Fluege = (from f in DB.Flug where f.Abflugort == "Rom" && f.FreiePlaetze > 0 orderby f.Datum descending select f).Skip(10).Take(5); // Ergebnisse ausgeben foreach (Flug f in Fluege) { Console.WriteLine(f.FlugNr + " fliegt am " + f.Datum.ToShortDateString() + " von " + f.Abflugort + " nach " + f.Zielort + " und hat " + f.FreiePlaetze + " freie Plätze!"); // Objekt ändern f.FreiePlaetze = 0; // Objekt als verändert markieren DB.UpdateObject(f); } Console.WriteLine("Speichern aller Änderungen..."); // Alle Änderungen speichern DB.SaveChanges(); } !!!Listing 4: OData-Client mit JavaScript und DataJS <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Fluege_DataJS_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>OData-Client mit JavaScript
Flüge von OData-Dienst laden und ändern
Aktualisieren