Gå til hovedindhold
Version2 it for professionelle
Forsiden

Hovedmenu

  • It-nyheder
  • Blogs
  • It-job
  • It-firmaer
  • Whitepapers
  • Opret bruger
  • Log ind
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?
Se kommentarer (4)
Emner

REST?en og WCF Services

Af admin adminuser 22. februar 2008 kl. 13:31

I forbindelse med næste Microsoft launch bølge bliver den afdeling som jeg arbejder i, bedt om at udarbejde webcasts, som skal vise de nye tiltag og features.

Når man kigger på listen over de nye egenskaber så var der en ting jeg bare måtte prøve ? REST i Windows Communication Foundation.

Set i lyset af mine tidligere forsøg på at være webservice-hip-på-en-web-2.0-agtig-måde måtte jeg naturligvis prøve igen. Specielt blev jeg ramt af Kim Dalsgaards kommentar:

? Hej Rene Du må vist hellere tage en tur mere med Ruby og Richardson's udemærkede bog ![Eksternt billede](http://www.version2.dk/uploads/smil3dbd4e398ff7b.gif" alt=")

Et lille hint:

GET /municipalitties GET /municipalitties/{municipality_id}/streets/{street_id}?

Jeg vidste jo godt at Kim trådte på en øm Microsoft-/René tå lige der, men heldigvis kan jeg nu tale med efter at have forfulgt den efterfølgende oplysning fra Morten Jokumsen (i samme tråd):

' Det skal da lige nævnes at der i næste version af wcf er taget højde for Uri Templates som vi være en indbygget del :)'

Jeg ved godt at det måske er lidt sort, men bottomline er: Hvordan kan jeg lave REST services i Windows Communication Foundation?

Traditionel WCF

Jeg laver traditionelt en webservice på følgende måde (WCF - ABC)...man tager...:

1) Et WCF service library (et Visual Studio 2008 projekt, med en reference til System.ServiceModel og brug af namespace med samme navn: using System.ServiceModel;)

2) Skriver vores Contract, som et traditionelt interface f.eks

3) Laver en implementering af kontrakten (interface)

4) Så laver jeg Address og Binding i configurationsfilen.

Jeg bruger traditionelt 'basicHttpBinding' til demo scenarier. Den binding er bare SOAP* over HTTP.

5) Sidst men ikke mindst prøver jeg at debugge ved hjælp at den test klient som Visual Studio tilbyder mig:

Okay, så hvad nu hvis jeg skulle udstille den samme service så jeg kan kalde den med HTTP GET og andre HTTP verbs?

RESTificering af en WCF service

I .Net 3.5 implementeringen af Windows Communication Foundation er der en række nye elementer, som kan bruges:

  • WebGet: Ny attribut, som gør at operationer kan kaldes via HTTP GET
  • webHttpBinding: Ny binding for REST services
  • webServiceHost: Ny hosting klasse for REST services
  • webServiceHostFactory: Ny hosting klasse for REST services, som ikke kræver config filer

Det ser jo altsammen meget godt ud, men hvad med URI'en og opbygningen af 'forespørgelseslinier''

I .Net 3.5 er der en ny klasse 'URITemplate', som gør at jeg vil være i stand til at opbygge URI?er der tilfredsstiller de enkelte REST varianter.

Så for at lave min SOAP echoService om til en 'REST service' gør jeg følgende:

1) Jeg attributterer min services operation interface (kontrakten/C) med 'WebGet' og sætter en URI template

2) Derefter laver jeg et host projekt (i dette tilfælde en consolapplikation) som skal hoste min service instans. Det er min mini webserver!

Som det kan ses af 'using' linierne i starten af dokumentet så skal jeg have en reference til System.Service.Model og System.ServiceModel.Web, samt en reference til mit service bibliotek (REST_blogpost namespace).

Læg mærke til den nye hostklasse WebServiceHost som er lavet til REST baserede services.

3) Det sidste jeg behøver at gøre er at lave en config fil i min host (jeg kopier config fra service library og lægger det i mit consol host projekt). Her skal jeg angive Address og Bindings

4) Tilslut kan jeg teste min service med en klient som understøtter HTTP GET

Hey! Endelig er jeg cool og hip sammen med de unge!!!!!

OBS

  • Som en venlig oplysning til Danske IT mediers journalistiske stab f.eks Rune og Dan giver jeg følgende henvisning: (SOAP Specifikation Part0 i sektion 6, Changes Between SOAP 1.1 and SOAP 1.2) ... og jeg citerer:

' SOAP 1.2 will not spell out the acronym.'

Eller på dansk - fra april, 2007 var og er SOAP ikke længere et akronym.

Send Tweet
Udskriv
Om admin adminuserFollow @version2

Kommentarer (4)

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Rasmus Christensen 23. feb. 2008 - 17.05
 
Config fil eller ej.

+1 til de hippe :)

Jeg har lige implementeret REST på en WCF service jeg har. I forvejen anvendte den en wsHttpBinding.
Det jeg oplever nu er at hvis jeg f.eks. laver en Console host der skal hoste samme service både med wsHttp og REST webHttp, ja så er jeg nødttil at opsætte min host med endpoints i koden. Man kan ikke skelne i config filen hvis der både skal være en webServiceHost og en ServiceHost igang på samme tid i samme applikation, og følge den normale måde at beskrive en service på i app.config.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jakob Røjel 23. feb. 2008 - 21.50
 
Check project astoria

Det er næppe nogen der ved hvor det ender men det her er rimeligt ok
http://astoria.mslivelabs.com/

/Jakob

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
René Løhde 25. feb. 2008 - 12.50
 
Både og...

Hej Rasmus,

Jeg prøvede lige lidt frem og tilbage. Jeg kan få flere endpoints og fleres bindings (incl webHttpBinding) til at virke hvis jeg bruger ServiceHost i min console host og laver følge config på endpoints:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<system.serviceModel>
<services>
<service name="REST_blogpost.echoService" behaviorConfiguration="service">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8000" />
</baseAddresses>
</host>

    &lt;endpoint address =&quot;/web&quot; binding=&quot;webHttpBinding&quot; contract=&quot;REST_blogpost.IechoService&quot;   
              behaviorConfiguration=&quot;webBehavior&quot;&gt;  
   &lt;/endpoint&gt;

    &lt;endpoint address =&quot;/basic&quot; binding=&quot;basicHttpBinding&quot; contract=&quot;REST_blogpost.IechoService&quot;   
              behaviorConfiguration=&quot;REST_blogpost.Service1Behavior&quot;&gt;  
    &lt;/endpoint&gt;

  &lt;/service&gt;  
&lt;/services&gt;  
&lt;behaviors&gt;  
  &lt;serviceBehaviors&gt;  
    &lt;behavior name=&quot;service&quot;&gt;  
      &lt;serviceMetadata httpGetEnabled=&quot;true&quot;/&gt;  
    &lt;/behavior&gt;      
  &lt;/serviceBehaviors&gt;  
  &lt;endpointBehaviors&gt;  
    &lt;behavior name=&quot;webBehavior&quot;&gt;  
      &lt;webHttp/&gt;  
    &lt;/behavior&gt;  
    &lt;behavior name=&quot;REST_blogpost.Service1Behavior&quot;&gt;  
    &lt;/behavior&gt;  
  &lt;/endpointBehaviors&gt;  
&lt;/behaviors&gt;  

</system.serviceModel>
</configuration>

Jeg bruger basicHttpBinding istedet for wsHttpBinding for at undgå de sikkerhedsproblemer som jeg kan få ved at brug wsHttpBinding. Jeg forventer dog at jeg kan bruge wsHttpBinding på samme måde som jeg bruger basicHttpBinding i dette eksempel.

@ Jakob,

Yes og jeg har helt sikkert også tænkt mig at prøve Astoria. Jeg tror at det er vej til at blive produktificeret nu da det er gået fra cool kodenavn til dårligt produktnavn :-)

-René

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Rasmus Christensen 2. mar. 2008 - 17.01
 
Lidt mere både og...

Hej René

Så fik jeg endelig tid til at afprøve det du skrev.
Og ja det virker. Faktisk så fandt jeg ud af at hvis du anvender WebServiceHost frem for ServiceHost, så kommer der en REST service. Hvis jeg anvender WebServiceHost sammen med den config opsætning du skrev, kommer der en /basic, /web (Rest) og yderligere en (rest) på / altså roden. Det skal man nok lige være opmærksom på, så man ikke har et ukendt entry point til servicen :)
Men tak for svaret.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer

Tilføj kommentar

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Log ind herunder eller opret en bruger for at skrive kommentarer
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?

Seneste nyt

Google vinder patentsagen om Android: Brød ikke Oracles Java-patenter

Udgivet 24. maj 11.30Opdateret 24. maj 11.30

Danske HP-ansatte er fyringstruede: Indkaldt til stormøde

Udgivet 24. maj 10.37Opdateret 24. maj 11.28

HP fyrer 27.000 ansatte

Udgivet 24. maj 10.10Opdateret 24. maj 10.10

Kinect til Windows klar på dansk til juni

Udgivet 24. maj 9.24Opdateret 24. maj 9.24

GOTO Copenhagen dag 3 i billeder: Sådan kaprer udstillerne kunder i biksen

Udgivet 24. maj 8.49Opdateret 24. maj 8.49

Flere it-nyheder »

Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Seneste debat

  1. Oracle tabte, vandt Google Java ?

    7 comments.
    Last update 13 sekunder
    Skrevet af Casper Bang
  2. GOTO - programming with the stars (F#)

    1 comment.
    Last update 11 minutter
    Skrevet af Torben Mogensen
  3. EMC: Derfor skal du undgå både public og privat cloud

    2 comments.
    Last update 12 minutter 3 sekunder
    Skrevet af Jesper Grønbæk
  4. Kynisk it-guru: »Internettet er basalt set noget lort«

    3 comments.
    Last update 12 minutter 23 sekunder
    Skrevet af Poul-Henning Kamp
  5. Sådan formaterer du tekst i debatten på Version2

    33 comments.
    Last update 24 minutter 4 sekunder
    Skrevet af Casper Thomsen
  6. Meego-afløseren Tizen klar til at tage kampen op med Android

    8 comments.
    Last update 47 minutter 19 sekunder
    Skrevet af Jacob Sparre Andersen
  7. Yahoo fyrer topchefen efter 4 måneder

    1 comment.
    Last update 54 minutter 37 sekunder
    Skrevet af Mark Thorsen
  8. Dart: Dynamisk Statisk Programmering

    24 comments.
    Last update 56 minutter 25 sekunder
    Skrevet af Baldur Norddahl

Mere debat »

Information

  • Kontakt redaktionen
  • Job- og annoncesalg
  • Teknisk support
  • Om Version2
  • Brugerbetingelser
  • Privatlivspolitik

Aktuelle emner

  • Agil udvikling
  • Android
  • Bruttolønsordning
  • Business Intelligence
  • Cloud computing
  • Download Windows 8
  • HTML5
  • Harddisk-priser
  • IE9
  • Intranet
  • It-sikkerhed
  • Kindle Fire
  • Multimedieskat
  • NemID
  • OS X Mountain Lion
  • Open source CMS
  • Projektledelse
  • Scrum
  • Sharepoint intranet
  • Storage
  • Ubuntu 11.10
  • Virtualisering
  • Windows 8
  • Windows Phone 7
  • iOS 5
  • iPhone 4S

Tjenester

  • Android-app
  • iPhone-app
  • RSS-feeds
Følg @version2dk
Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Version2 udgives af

  • Mediehuset Ingeniøren A/S work Skelbækgade 4 1717 København V
  • Tlf. work 33265300