Dla samego REST wykorzystujemy w WCF webHttpBinding oraz webHttpBehavior. Adresowanie zasobów odbywa się poprzez dwa atrybuty zawarte w System.ServiceModel.Web: WebGet i WebInvoke. Pierwszy z nich definiuje operacje wykonywane przy żądaniach typu GET, drugi zapewnia obsługę pozostałych żądań.
[ServiceContract] public interface IEvaluationService { [OperationContract] [WebInvoke(Method ="POST", UriTemplate = "evals")] void SubmitEvaluation(Evaluation eval); [OperationContract] [WebGet(UriTemplate = "evals", ResponseFormat = WebMessageFormat.Json)] List<Evaluation> GetEvaluations(); [OperationContract] [WebGet(UriTemplate = "eval/{id}")] Evaluation GetEvaluation(string id); [OperationContract] [WebInvoke(Method = "DELETE", UriTemplate = "eval/{id}")] void RemoveEvaluation(string id); }
Poprzez atrybuty WebGet i WebInvoke można także ustawić format zwracanej / przyjmowanej wiadomości. Domyślnie jest to XML. Plik konfiguracyjny dla aplikacji hostującej jest bardzo krótki, a wszystko dzięki specjalnej klasie hostującej REST-owe serwisy.
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true"/> </system.web> <system.serviceModel> <services> <service name="EvaluationServiceLibraryRest.EvaluationService" > <host> <baseAddresses> <add baseAddress="http://localhost:18081/evaluations/"/> </baseAddresses> </host> </service> </services> </system.serviceModel> <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
WebServiceHost host = new WebServiceHost(typeof(EvaluationService)); try { host.Open(); Console.ReadKey(); host.Close(); } catch (Exception e) { Console.WriteLine(e.Message); Console.ReadKey(); host.Abort(); }
Brak komentarzy:
Prześlij komentarz