Verfasst von: bletra | 9. Juni 2010

WCF: Schnellstart (Teil 3 von 3)

Bisherige Artikel dieser Reihe:

  1. Einfacher Dienst mit SOAP
  2. Einfacher Dienst mit REST

Innerhalb von Webprojekten unterstützt VS2010 die Erstellung von REST-basierten Webservices sehr gut. Projektvorlage hierfür sind alle Web-Projektvorlagen. Innerhalb eines solchen Webprojekts kann dann auf der Vorlage von ADO.Net DataService ein Webservice erstellt werden, der mit oder ohne Unterstützung eines ORM eine Anbindung an eine Datenbank herstellt. Dies ist das Thema dieses letzten Artikels. Das hier vorgestellte Beispiel ist angelehnt an den ersten Teil des Vortrags OData with Scott Hanselman.

Datenbankanbindung mit REST

Vorbereitungen:

  • Erstellen Sie ein Webprojekt.
  • Erstellen Sie eine Connection zur Demo-Datenbank Northwind (NORTHWIND.MDF) – oder einer anderen SQL Datenbank.
  • Erstellen Sie ein ADO.Net Entity Data Model auf Basis der Tabelle Categories (Northwind.edmx).

Fügen Sie nun ein neues Item auf Basis der Vorlage von ADO.Net DataService hinzu (NorthwindService.svc). Es werden zwei Dateien erzeugt, eine mit folgendem Markup:

<%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=..." Service="WebNorthwind.NorthwindService" %>

Und eine Code-Datei. In dieser müssen Sie die Zugriffsrechte definieren und den Datentyp Ihres Models angeben.

public class NorthwindService : DataService<NORTHWINDEntities>
{
  public static void InitializeService(DataServiceConfiguration config)
  {
    config.SetEntitySetAccessRule("*", EntitySetRights.All); //TODO: Rechte deutlich mehr einschränken, nur zum ersten Test zulässig!!!
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
   }
}

Test mit Fiddler und LINQPad

Damit haben Sie vollen lesenden und schreibenden Zugriff per REST auf Ihre Tabelle Categories implementiert. Standardmäßig wird als Response XML in Form von RSS-Atoms erzeugt.
Sie können dies nun überprüfen, indem Sie die Webapplikation starten und mit Ihrem Browser oder dem freien Debug-Tool Fiddler darauf zugreifen:
Geben Sie folgende Adressen ein:

Sie können sogar per LINQ auf diesen Daten browsen. Starten Sie hierfür LINQPad, fügen Sie als Connection die Adresse zu Ihrem Dienst ein und als Abfrage:

  • from c in Categories where c.CategoryId <50 select c

Denken Sie daran, rechts oben den Dienst in der Combobox auszuwählen. Sie erhalten die ersten 50 Datensätze. Mit der Ansicht SQL erhalten Sie die zugehörige URI, die Sie so natürlich auch in Fiddler oder Ihrem Browser eingeben können.

Ein Post mit JavaScript und JSON oder mit unten stehender Clientapplikation realisiert einen schreibenden Zugriff. Als URI verwenden Sie für ein Insert http://localhost:1066/NorthwindService.svc/Categories und für ein Update den entsprechenden Eintrag, also z.B. http://localhost:1066/NorthwindService.svc/Categories(1)

Client Applikation

Zum Konsumieren des erstellten Webdienstes können Sie mit VS2010 eine beliebige Client-Applikation erstellen. Ähnlich zum Hinzufügen einer Referenz auf eine Assembly können Sie eine Webreferenz auf einen Dienst hinzufügen. Fügen Sie ein passendes using-Statement ein (using ClientNamespace.ServiceReferenceName). Fügen Sie ein Datagrid o.ä. hinzu und lassen Sie mit folgendem Code den Inhalt der Tabelle Categories anzeigen:

Consumer.ServiceReference1.NORTHWINDModel.NORTHWINDEntities ent = new ServiceReference1.NORTHWINDModel.NORTHWINDEntities(new Uri("http://localhost:1066/NorthwindService.svc"));
 System.Data.Services.Client.DataServiceQuery<Consumer.ServiceReference1.NORTHWINDModel.Categories> cats = ent.Categories;
 GridView1.DataSource = cats;
 GridView1.DataBind();

Ausführlichere Informationen finden Sie bei Microsoft unter: Using Microsoft ADO.NET Data Services.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Kategorien

%d Bloggern gefällt das: