REST med WCF 4 Beta 1

Med WCF 4 introduceras en hel del nyheter. Denna artikel fortsätter på det REST-tema jag påbörjade tidigare och fokuserar specifikt på vad som är nytt i WCF 4 Beta 1 som hjälper oss i byggandet av REST-tjänster. Inte helt oväntat är det till stor del funktionalitet som vi känner igen från REST Starter Kit som nu hittat in i själva ramverket. Någonting säger mig att så kommer det också fortsatt vara vid Beta 2 lanseringen men, det är bara en personlig gissning.

Hjälpsida

Hjälpsidan är i själva verket en Atom Feed. De flesta Web Browsers har dock någon form av Feed läsare i sig, vilket du kan se i nedan exempel där Internet Explorer visar Feed:en i ett läsbart format, vilket gör att du väldigt enkelt kan se tjänstens exponerade resurser. Vidare ger hjälpsidan information om URI-format, responsformat, exempel på responstyper etc. Skriv in “help” efter tjänstens basadress för att visa hjälpsidan.

Då hjälpsidan är en Atom Feed innebär det också att du har möjlighet att programmatiskt prenumerera på hjälpsidans innehåll om du så önskar.

Men hur aktiverar man det då?

Saken är den att funktionen är aktiverad som standard. Det är webHttpBehavior som har begåvats med ytterligare en egenskap - enableHelp, vilken är satt till “true” som standard av WebServiceHost.

 <endpointBehaviors>
  <behavior name="HelpBehavior">
    <webHttp enableHelp="true" />
  </behavior>
</endpointBehaviors>

WAS aktivering av tjänster utan .svc-fil.

RESTafarier kan inte tolerera URL:er som inte "ser snygga ut", eller är RESTfulla. De kommer gilla detta.

Med WCF 3.5 sker WAS aktivering av en tjänst mha en .svc fil, vilket i detta fall genererar en URI enligt nedan.

I WCF 4 kommer möjligheten att göra denna aktivering baserat på en relativ adress. I följande exempel har jag angivit att den relativa adressen "/Customers" skall aktivera min tjänst “CustomerService”. På så vis kan jag nu tydligare få till exponeringen av min kollektion av kunder.

Så, kasta din .svc fil och lägg till detta i web.config istället:

 <serviceHostingEnvironment>
  <serviceActivations>
    <add relativeAddress="Customers" service="NoSvcFile.CustomerService" 
         factory="System.ServiceModel.Activation.WebServiceHostFactory"/>
  </serviceActivations>
</serviceHostingEnvironment>

HTTP Caching

En av fördelarna med REST är att du kan dra nytta av HTTP infrastruktur för Caching, t ex IIS:ens output cache. Detta sker i WCF 4 med en integration gjord till ASP.NET:s Caching förmågor. Med det nya attributet AspNetCacheProfile kan du ange vilken Cache Profile du vill använda för specifik operation.

 [OperationContract]
[WebGet]
[AspNetCacheProfile("defaultCacheProfile")]
public List<Customer> GetCustomers() {

Definiera sedan Cache Profilen i web.config som vanligt.

 <system.web>
  <compilation debug="true" targetFrameworkMoniker=".NETFramework,Version=v4.0"/>
  <caching>
    <outputCacheSettings>
      <outputCacheProfiles>
        <add name="defaultCacheProfile" duration="10" varyByParam="*"/>
      </outputCacheProfiles>
    </outputCacheSettings>
  </caching>
</system.web>

Exempelkod

Ladda ned exempel för ovan här: