Bouw eens een API met WCF, deel 4: Beschikbaar via SOAP, XML en JSON
This post was originally published on Coding Glamour.
Een API is geen API als er niet via verschillende protocollen tegenaan
gepraat kan worden; iets wat in WCF volledig in config geregeld kan worden.
In Visual Studio 2008 nog iets wat haast automatisch handwerk werd: de
Configuration Editor was niet alleen alles behalve intuitief, maar genereerde
ook nogal eens niet werkende configs. 2010 heeft daar echter verbeteringen
in aangebracht, waardoor het configureren voor meerdere endpoints een breeze
is.
Service
We gaan uit van de volgende service:
Endpoints?
Voor een standaard WCF API die SOAP en REST ondersteunt zijn er 2 endpoints
nodig. Een endpoint is een adres waarop de service kan reageren volgens
een bepaalde configuratieset. De endpoints in dit geval zijn:
- rest, een webHttpBinding die luistert op adres '' (leeg)
- soap, een basicHttpBinding die luistert op adres 'soap'
Configureren
In je project kies voor 'Tools' -> 'WCF Configuration Editor', en selecteer je web.config-file onder 'File' -> 'Open' -> 'Config file'. Als je op 'Services' klikt zie je dat er standaard al een aantal endpoints zijn aangemaakt. Verwijder deze allemaal met de 'Delete' button.
Behavior aanmaken
Allereerst maken we een 'behavior' aan, een set regels waar de service zich aan moet houden. Hier kunnen we instellen dat de service via HTTP te benaderen is. Nodig om de service beschikbaar te maken via REST.
Eerste endpoint toevoegen: REST
Wanneer je nu op de folder 'Services' klikt, kies voor 'Create a New Service Endpoint'. Je komt vervolgens in een wizard terecht.
1. Selecteer allereerst de DLL van je service, en direct daarna de type:
2. Kies bij 'What communication mode is your service using' voor 'HTTP'.
3. Kies bij 'What method of interoperability do you want to use' voor 'Basic Web Services interoperability'
4. Voer bij 'What is the address of your endpoint' niets in:
5. Het eerste endpoint is aangemaakt. Verander de volgende settings:
Voila. Wanneer je nu build is je service beschikbaar onder:
http://localhost:POORT/DemoService.wcf/getdata?id=1
Tweede endpoint toevoegen: SOAP
Voor het toevoegen van je 'SOAP' endpoint, kies je weer voor 'Create a New Service Endpoint'. Druk steeds op 'Next >' behalve bij 'Address'. Voer hier 'soap' in. C'est soit.
Voor some reason kiest WCF er soms voor om '<identity/>' secties in je web.config te zetten. Deze zijn voor een publieke API niet nodig, als je hier een fout over krijgt; verwijder dan secties die er uit zien als:
Je SOAP service is nu beschikbaar onder: 'http://localhost:POORT/DemoService.wcf?wsdl', en is direct bruikbaar vanuit elk ander platform dat een SOAP client beschikbaar heeft!
REST ook via JSON beschikbaar maken
Met de huidige config is de service alleen via XML beschikbaar. We kunnen echter met 'behaviors' de service ook via JSON beschikbaar maken. Maak onder 'Endpoint Behaviors' de volgende behavior aan:
Wanneer je nu het volgende endpoint toevoegt, is je service ook beschikbaar als JSON service:
De service is benaderbaar via: http://localhost:POORT/DemoService.wcf/json/getdata?id=1
Et voila
In een paar minuten is je WCF service benaderbaar via XML, JSON en SOAP. Wanneer je bijvoorbeeld een NetTcpBinding (voor snelheid, reliability, noem iets) wil toevoegen, kan je gebruik maken van dezelfde stappen.
There are 3 comments on this article, read them on Coding Glamour.