Die meisten REST Features von WCF konnte man bisher ausschließlich im WCF Starter Kit finden. Ab .NET 4.0 sind diese überwiegend zum festen Bestandteil von WCF 4.0 geworden. Um ein REST Service zu erstellen am einfachsten ist es im Visual Studio 2010 WCF Rest Template zu verwenden, das über Code Gallery sehr einfach und schnell installierbar ist.
Ein REST-Service Projekt benötigt eine Global.Asax Datei aus ASP.NET, damit die RoutingTable für Service angelegt werden kann:
RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));
Die Registrierung oben definiert eine Route fuer Service1 mit gegebener HostFactory. Damit kann folgende Operation
[WebGet(UriTemplate = "")]
public List<MyResource> GetCollection()
über folgendes URI erreicht werden: http://host/service1
Wenn eine Operation Eingabeparameter hat kann sie wie folgt definiert werden:
[WebGet(UriTemplate = "{id}")]
public MyResource Get(string id)
Fuer id=123, wuerde man folgende URI wenden:
http://host/service1/1231
Etwas komplexer ist folgendes Beispiel mit zwei Argumenten:
[WebGet(UriTemplate = "gettime/{zone}/{format}")]
public DateTime GetTime(string zone, string format)
Die URI für diese Operation lautet:
http://host/service1/gettime/berlin/YYYYMMDD
Mit verschiedenen URI-Templates kann man die Service Abfragen beliebig stylen. Am einfachsten ist es eine URI zu verwenden, die verschiedene HTTP-Methoden einsetzt. Zum Beispiel um die Ressource zu erzeugen definiert man Operaqtion Create.
[WebInvoke(UriTemplate = "", Method = "POST")]
public MyResource CreateResource(MyResource instance)
Diese Operation wäre über URI http://host/service1 erreichbar. Allerdings HTTP Body müsste MyResource enthalten. Im JSON würde dies wie folgt aussehen:
{"Id":2147483647,"StringValue":"String content"}
Somit ist es möglich auch weiter HTTP Methoden wie PUT (für UpdateResource) oder DELETE (für DeleteResource) anzuwenden.
Last, but not least WCF 4.0 REST bietet eine automatisch generierte Help-Page an. Diese ist unter folgender URI zu finden: http://host/service1/help
Damit haben auch die REST-basierte Dienste eine mehr oder weniger ausführliche Beschreibung.
Cheers
Posted
May 16 2010, 08:49 PM
by
Damir Dobric