Miroslav Holec
Premium

Budoucnost WCF a gRPC v .NET 5

Miroslav Holec   26. října 2020

Článek se vztahuje k verzi produktu ASP.NET Core 3.1+

Tento článek byl napsán v roce 2020. Vývojářské technologie se neustále inovují a článek již nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

Microsoft nám do .NET Core 3 přidal podporu pro framework gRPC. Ten nám nabízí nářadí pro vývoj vysoce výkonných webových služeb a je zároveň myšlenkovým a jediným nástupcem pro technologii WCF. Co znamená příchod .NET 5 pro tyto technologie a jaké novinky nás čekají?

Co je gRPC

Framework gRPC je vedle REST API další možností, jak zpřístupnit data různým klientům, přičemž klientem mohou být různé webové služby nebo i webové front-endy. Oproti RESTu přináší gRPC několik rozdílů:

  • jsou contract-first, tedy při návrhu se zaměřujeme především na návrh API
  • kontrakty jsou definovány pomocí Protocol Buffers (nezávislé na jazyku)
  • díky kontraktům (které jsou základem) funguje lépe nejrůznější tooling
  • používá řadu funkcionalit definovabých v HTTP/2, díky čemuž se těšíme lepší výkonnosti

To s sebou nese i odlišný přístup. Vývoj gRPC služeb je trochu složitější než v případě jednoduchých REST API. Samotné Protocol Buffers kvůli nezávislosti na jazyku neumí některé věci, na které jsme v .NET Core platformě zvyklí a musíme vyvinout dodatečné úsilí, abychom si je přidali. Podpora HTTP/2 je ve skutečnosti povinná, což může ztížit například hostování (stále chybí podpora v Azure App Service na IIS).

Obecně gRPC nejsou sezónní trend ale ověřená technologie, která se několik let používá na různých platformách. Framework gRPC oceníte pro vývoj výkonných mikroslužeb, pro vyřešení real-time komunikace nebo intenzivní komunikace směrem od klienta na server či naopak.

Náhrada za WCF v .NET Core

V .NET Core nemají staré WCF podporu a předpokládá se, že:

  • migrujete na gRPC v ASP.NET Core
  • migrujete na REST API v ASP.NET Core
  • budete udržovat stávající WCF službu v NET Frameworku

Všechny varianty dávají za určitých okolností smysl. Přechod z WCF na gRPC je velmi intuitivní, protože principy vývoje jsou si podobné. Není-li pro Vás HTTP/2 překážkou, dostanete do ruky minimalistický framework umožňující vývoj výkonných API, která se budou velmi pohodlně konzumovat na všech myslitelných platformách.

Zejména u starších WCF služeb Vám nepůjde ani tak o výkonnost, jako spíše modernizaci a schopnost poskytnutí dat různým klientům. Zde najdou uplatnění dnes tradiční REST API, která jsou pro vývoj jednoduchá a konzumovatelná prakticky na všech platformách (využívají HTTP protokol).

U starších API přichází v úvahu i varianta, že je necháte dožít na .NET Frameworku a WCF. Zejména, pokud se jedná o rozsáhlejší služby, které nechcete dále rozvíjet a nemají ambice dlouho přežívat.

Situace v .NET 5

Ve verzi .NET 5 se kupodivu nic moc nemění. Jak Microsoft deklaroval v minulosti, WCF se podpory v novém frameworku nedočkají. Vzhledem k minimalističnosti gRPC frameworku se v nové verzi .NET 5 a webového frameworku ASP.NET Core 5 neobjevují žádné novinky související s vývoje gRPC služeb.

Vývojář dostane s přechodem na .NET 5 automaticky lepší performance plynoucí ze změn ve frameworku, GC nebo například v runtimes. Nepatrná vylepšení se týkají i Kestrelu. Více o performance se dočtete zde.

Zajímavější situace je z pohledu konzumace gRPC služeb. Microsoft rozvíjí projekt gRPC-Web, kde si klade za cíl možnost volat gRPC služby z browseru. To by měl umožnit například Blazor WebAssembly. Dnes je toto možné i pomocí různých proxies, které interakci v UI "překládají" na HTTP/2 komunikaci. Stejně tak by mělo být možné volat gRPC služby z dalších platforem, jako Xamarin / MAUI. Více informací o této větvi vývoje najdete na GitHubu.

Chcete-li vyvíjet gRPC na platformě macOS, přečtěte si můj návod zde na blogu (jsou potřeba menší hacky).

Pokud se Vám gRPC líbí, můžete mě se svým týmem kontaktovat a mohu pro Vás připravit on-line školení. Tématický rozsah a osnovu školení gRPC najdete zde na webu.