Windows Developer

Das unabhängige Magazin für Microsoft-Technologien
X

Quickvote: Was bedeutet Microsofts neue Offenheit für Sie?

Tipps und Tricks rund um .NET und Visual Studio

Individuelle generische Dienstoperationen bei WCF Data Services

Individuelle generische Dienstoperationen bei WCF Data Services

Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer teilen in der Kolumne ".NETversum" ihr Expertenwissen rund um .NET-Tools und WPF mit.

Selbstdefinierte Dienstoperationen bei WCF Data Services können auch generisch sein, indem man den Rückgabetyp als IQueryable<T> definiert. Das bedeutet, dass der Aufruf an die vordefinierten Parameter weitere Standardoperatoren der WCF Data Services (z. B. $filter, $top, $skip, $expand) anhängen kann. Listing 1 zeigt eine selbstdefinierte generische Dienstoperation, die Flug-Entitäten liefert.

Listing 1
// Zusätzliche Dienstoperation
// Aufruf: http://UnserServer/WWWingsDataService.svc/FluegeVonNach?von='Rom'&nach='Berlin'&$skip=10&$top=5
[WebGet]
public IQueryable<de.WWWings.GO_STE.Flug> FluegeVonNach2(string von, string nach)
{
if (string.IsNullOrEmpty(von))
{
throw new ArgumentNullException("von", "von darf nicht leer sein!");
}
if (string.IsNullOrEmpty(nach))
{
throw new ArgumentNullException("nach", "nach darf nicht leer sein!");
}
return (from f in this.CurrentDataSource.Flug where f.Abflugort == von && f.Zielort == nach select f);
}

Diese Dienstoperation kann man nun so aufrufen: http://UnserServer/WWWingsDataService.svc/FluegeVonNach2?von='Rom'&nach='Moskau'&$filter=FreiePlaetze gt 0&$skip=10&$top=5

Das bedeutet: Die Parameterwerte Rom und Moskau werden an die vordefinierten Parameter von und nach gebunden. Darüber hinaus wird ein zusätzlicher Filter (Freie Plätze > 0) angewendet und ein Blättern (Überspringen der ersten 10, Rückgabe der nächsten 5 Entitäten) ausgeführt. Ganz wichtig: Das IQueryable in Verbindung mit einer geeigneten Datenquelle (z. B. ADO.NET Entity Framework) führt die komplette Filterbedingung (also Abflugort, Zielort und freie Plätze) sowie das Blättern (alias Paging) in der Datenbank aus. Bei der Generierung von SQL werden also die in der Dienstoperation vordefinierten Bedingungen mit den zusätzlichen Operationen verbunden.

Eine weitere Option ist übrigens, in den selbstdefinierten Dienstoperationen dynamisches LINQ in Verbindung mit dem ADO.NET Entity Framework zu verwenden. Die folgende Operation:

// Zusätzliche Dienstoperation mit generischem Filter-Parameter
[WebGet]
public int GetCount(string where)
{
return String.IsNullOrEmpty(where) ? CurrentDataSource.Flug.Count() : CurrentDataSource.Flug.Where(where).Count();
}

kann man so aufrufen: http://UnserServer/WWWingsDataService.svc/GetCount?where='it.Abflugort="Rom"'

Dabei ist die Bedingung nun nicht mehr in OData-Syntax (also mit Operatoren eq, gt, ls etc.), sondern in der Entity-SQL-Syntax (normale Operatorenschreibweise, it als Variablenname) zu übersenden. Die Bedingung wird an die Query-Builder-Methode Where() übergeben, die das ADO.NET Entity Framework in der Klasse ObjectSet<T> bereitstellt.

Mehr aus dieser Ausgabe

Artikel erschienen in

Web APIs, also APIs auf Basis der im Web üblichen Standards HTTP und JSON, sind…
Windows Developer 5.2013
Mobile Geräte wie Tablets oder Phones sind nichts Neues mehr, trotzdem aber so…
Offlinefähigkeit in Windows Store Apps
Die WinRT stellt uns Funktionalität zur Verfügung, um Windows-Store-Apps…
Beim Reactive Extensions (Rx) Framework handelt es sich um eine .NET-…
An sich ist das .NET Framework eine plattformunabhängige Entwicklungsumgebung…
An sich ist das .NET Framework eine plattformunabhängige Entwicklungsumgebung.…
Bei ASP.NET MVC 4-Seiten über Google, Facebook, Twitter und Co. anmelden
Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer teilen in der…
Windows Store App: Bildschirmsperre verhindern
In der neuen Kolumne "XAML Expertise" des Windows Developer präsentiert Gregor…
Freigabevertrag in Windows-8-Anwendungen
Alle Anwendungen müssen eine Vielzahl von nebensächlichen Aufgaben erledigen,…
Individuelle generische Dienstoperationen bei WCF Data Services
Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer teilen in der…
Silverlight: TextBlock-Texte selektierbar machen
In der neuen Kolumne "XAML Expertise" des Windows Developer präsentiert Gregor…
Windows Phone: Verbindung zum Netzwerk überprüfen
In der neuen Kolumne "XAML Expertise" des Windows Developer präsentiert Gregor…
Gemeinsame DLL-Bibliotheken in verschiedenen .NET-Varianten nutzen
Dr. Holger Schwichtenberg (MVP) und FH-Prof. Manfred Steyer teilen in der…
 

Kommentare

Ihr Kommentar zum Thema

Als Gast kommentieren:

Gastkommentare werden nach redaktioneller Prüfung freigegeben (bitte Policy beachten).

WEITERE TEILE DER SERIE: dotNETversum