Naar kennisoverzicht

WCF versus ASP.NET Web API

Regelmatig krijg ik van klanten de vraag: Wat kan ik nu beter gebruiken? ASP.NET Web API (WebAPI) of Windows Communication Foundation (WCF)? Een logische vraag, want beide lijken in eerste instantie hetzelfde te doen. WCF is een framework dat veel uitgebreider is en dus ook meer kan dan WebAPI. Wat betreft configuratie is WCF een stuk complexer dan WebAPI. De vraag is: heb je die extra’s nodig? Om een lang verhaal kort te maken. Er zijn volgens mij 3 belangrijke zaken die in de meeste gevallen de keuze bepalen:

  1. Protocol Allereerst het protocol. WCF is gebouwd rondom het concept, je programmeert de functionaliteit en je configureert hoe dat ontsloten wordt. In die configuratie kun je ervoor kiezen om http, tcp, udp of zelfs een custom protocol te gebruiken. WCF ondersteunt dus meerdere protocollen voor dezelfde functionaliteit. WebAPI daarentegen maakt alleen gebruik van het http protocol.
  2. Reliable Messaging en Transaction WCF ondersteunt Web Service (WS) specifications, zoals WS-Security, WS-ReliableMessaging, WS-Transaction, etc. Dit soort zaken ondersteunt WebAPI niet.
  3. Contract Bij een webservice hoort een interface beschrijving, ook wel een contract genoemd. Bij WCF gebeurt dat met een WSDL. Op basis van zo’n WSDL kunnen bepaalde tools client proxies generen, zodat de aanroepende partij geen low level communicatie op hoeft te zetten en een type safe model heeft van de service. Bij WebAPI zijn er wel mogelijkheden om geautomatiseerd documentatie te genereren, maar die is voor zover ik weet niet geschikt om client proxies mee te genereren. Er zijn wel initiatieven via nuget beschikbaar, maar nog niet breed gedragen gezien de statistieken.

Conclusie

Volgens mij is het een gezond uitgangspunt om standaard WebAPI te pakken omdat WCF toch een stuk complexer is. Mocht je echter requirements hebben die je dwingen om:

  • meerdere protocollen te moeten ondersteunen
  • transacties over calls heen te ondersteunen (https://en.wikipedia.org/wiki/WS-Transaction)
  • gebruik te maken van Reliable Messaging (https://en.wikipedia.org/wiki/WS-ReliableMessaging)
  • soap-berichten te gebruiken (https://nl.wikipedia.org/wiki/SOAP)
  • een te valideren contract te hebben

Dan heb je de extra’s die WCF biedt wel echt nodig en kun je dus beter WCF gebruiken.