Czym jest WCF?
WCF (Windows Communication Foundation) to framework do budowania połączeń i komunikacji między aplikacjami w architekturze zorientowanej na usługi (SOA). Umożliwia tworzenie usług sieciowych, które mogą komunikować się z klientami przy użyciu różnych protokołów i formatów danych. W praktyce WCF pozwalał pisać jedną implementację usługi i wystawiać ją na wiele sposobów - np. jako usługę SOAP przez HTTP, połączenie binarne przez TCP, komunikat kolejkowany przez MSMQ, czy nawet metodę RPC dostępną tylko lokalnie przez named pipes. Konfiguracja endpontów (tzw. model ABC: Address, Binding, Contract) określała adres usługi, używany protokół/transport oraz kontrakt (interfejs z metodami dostępnymi dla klienta). Ogromną zaletą WCF była obsługa zaawansowanych standardów sieciowych - np. bezpieczeństwa (szyfrowanie, certyfikaty), transakcji czy niezawodnych komunikatów (WS-ReliableMessaging), co czyniło go atrakcyjnym dla dużych systemów enterprise.
WCF w swoim czasie uchodził za rozwiązanie "do wszystkiego" w komunikacji rozproszonej. Przykładowo, zamiast osobno uczyć się Web Service'ów ASMX, .NET Remoting czy MSMQ, można było użyć właśnie WCF, bo wspierał te wszystkie scenariusze we wspólny sposób. Microsoft dostarczył bogate API, a także zintegrowane narzędzia - np. w Visual Studio mogliśmy wygenerować klienta przez Add Service Reference i od razu wywoływać metody usługi jak lokalne obiekty. To wszystko sprawiło, że WCF szybko zdobył popularność w świecie .NET.
Dlaczego WCF był kiedyś tak popularny?
Kilka kluczowych powodów, dla których WCF święcił triumfy około dekadę temu:
• Oficjalne wsparcie i uniwersalność: WCF był oficjalnym, promowanym przez Microsoft rozwiązaniem do tworzenia usług. Zapewniał jeden zunifikowany model programowania zamiast kilku odrębnych technologii. Deweloperzy cenili to, że niezależnie od tego, czy potrzebują usługi SOAP, komunikacji binarnej czy kolejkowania, wszystko mogli załatwić za pomocą WCF.
• Bogate możliwości: WCF dostarczał wiele funkcjonalności enterprise out-of-the-box - od zabezpieczeń (szyfrowanie, uwierzytelnianie, autoryzacja) przez transakcje rozproszone, po niezawodne przesyłanie komunikatów. Konfigurowalne bindingi umożliwiały łatwe dostosowanie komunikacji do potrzeb (np. wsparcie dla komunikatów w formacie XML, JSON, binarnym itd.). Tego typu możliwości były trudne do osiągnięcia "ręcznie" przy użyciu prostszych technologii, więc WCF rozwiązywał realne problemy dużych firm.
• Integracja z .NET: Ponieważ WCF był częścią .NET Framework, korzystanie z niego w aplikacjach .NET było naturalne. Hostowanie usługi WCF w IIS czy jako serwis Windows było dobrze udokumentowane i wspierane. Po stronie klienckiej .NET oferował prosty mechanizm tworzenia proxy klienta. Dla ekosystemu Windows/.NET WCF był więc domyślnym wyborem do komunikacji między aplikacjami.
Warto dodać, że epoka świetności WCF przypadła na czasy, gdy SOAP (oparty o XML protokół wymiany danych) był standardem dla usług sieciowych. WCF był wręcz stworzony z myślą o SOAP i standardach WS-*. Dzięki temu możliwa była interoperacyjność, teoretycznie klient w Javie czy PHP mógł wywołać usługę WCF przez SOAP (w praktyce bywało to wyzwaniem, o czym dalej). Niemniej, przez długi czas WCF wyznaczał kierunek, w jakim budowano usługi w świecie Microsoft.
Zmierzch WCF – dlaczego stracił popularność?
Mimo swoich zalet, z biegiem lat WCF zaczął tracić na znaczeniu. Dziś tworząc nową aplikację .NET raczej nie wybierzesz WCF. Oto główne powody tej zmiany:
• Zmiana trendów: REST i HTTP zamiast SOAP: Świat tworzenia API przeszedł w dużej mierze na architekturę REST z wykorzystaniem prostego HTTP + JSON. Programiści spoza ekosystemu .NET nie chcieli zmagać się z ciężkimi SOAP/WSDL, oczekiwali prostego REST API. Już w latach 2010–2015 dało się zauważyć wyraźny trend popularyzacji REST API. WCF co prawda z czasem dodał pewne wsparcie dla REST/JSON, ale nie było to tak naturalne jak w dedykowanych rozwiązaniach typu ASP.NET Web API. W rezultacie wiele firm, zwłaszcza tworzących usługi publiczne dla różnych klientów (web, mobile, inne języki), zaczęło odchodzić od WCF na rzecz lżejszych technologii webowych.
• Złożoność i konfiguracja: WCF oferował ogromną elastyczność, ale za cenę wysokiej złożoności. Konfiguracja usług w WCF (czy to w plikach config, czy atrybutami) bywała skomplikowana, mnogość opcji potrafiła przytłoczyć początkujących. Wielu programistów narzekało, że w WCF było "dużo konfigurowania i XML-i", podczas gdy woleliby pisać po prostu kod. Dla porównania, tworzenie prostego REST API w ASP.NET Core jest bardziej bezpośrednie, definiujemy kontrolery i metody, bez nadmiernej konfiguracji kontraktów, bindingów itp. Wraz ze wzrostem popularności podejścia "convention over configuration" i prostszych frameworków, rozbudowany i konfigurowalny do granic WCF zaczął wyglądać na ciężki i przestarzały.
• Brak wsparcia w nowym .NET (Core/5/6): Prawdziwy „gwóźdź do trumny” dla WCF przyszedł wraz z .NET Core. Gdy Microsoft tworzył odchudzoną, wydajną, cross-platformową wersję .NET, zdecydowano nie przenosić całego WCF do nowego środowiska. .NET Core (2016+) początkowo w ogóle nie miał WCF, a w kolejnych wersjach dodano jedynie wsparcie klienckie (biblioteki do wywoływania istniejących usług WCF). Serwerowej części WCF oficjalnie nie zaimplementowano w .NET Core/5/6, zamiast tego Microsoft zasugerował używanie nowoczesnych technologii jak gRPC do komunikacji RPC i ASP.NET Core do tworzenia web API. Dla wielu zespołów była to jasna wskazówka: nie planujemy nowych systemów w oparciu o WCF.
• Nowe alternatywy i strategia Microsoftu: W ostatnich latach pojawiły się wydajne alternatywy spełniające role WCF. Przykładowo wspomniany gRPC to framework RPC wspierany przez .NET 5/6+, bardzo wydajny i współpracujący z wieloma językami. Do tworzenia klasycznych API REST mamy ASP.NET Core Web API (lub nawet Minimal API). Te technologie są lżejsze, nowocześniejsze i lepiej dostosowane do dzisiejszych wymagań (np. mikrousługi, architektura chmurowa). Microsoft oficjalnie rekomenduje właśnie je - "gRPC jest obecnie preferowanym rozwiązaniem" dla nowych usług, a użycie WCF/CoreWCF sugeruje tylko w razie konieczności utrzymania starych aplikacji. Skoro sam twórca platformy odsunął WCF na boczny tor, społeczność .NET również poszła w tym kierunku.
Warto nadmienić, że dla tych, którzy muszą utrzymać swoje usługi WCF, istnieje projekt CoreWCF, społecznościowa implementacja części funkcjonalności WCF na .NET 6/7. CoreWCF pozwala przenieść podstawowe usługi WCF z .NET Framework na nowszą platformę, ale nie jest to pełny zamiennik. Microsoft traktuje go raczej jako pomost, a nie coś, na czym mamy budować zupełnie nowe systemy. Krótko mówiąc, WCF obecnie żyje głównie w aplikacjach legacy. Oryginalna implementacja WCF działa tylko na Windows (na .NET Framework), jednak jeśli firma ma działający system w WCF, prawdopodobnie będzie on w stanie działać jeszcze przez długie lata (mówi się nawet o dwóch dekadach wsparcia w ramach Windows/NET Framework). Mimo to, planując nowe projekty w świecie .NET, WCF raczej nie znajduje się już na liście rozważanych technologii.
Podsumowanie
Windows Communication Foundation odegrał ważną rolę w historii .NET. 10 lat temu była to technologia pierwszego wyboru do budowy usług i komunikacji w architekturze SOA na platformie Microsoft. Dostarczała rozwiązań wielu problemów (bezpieczeństwo, transakcje, niezawodność komunikacji) w ramach jednego spójnego frameworka. Jednak wraz ze zmianą trendów (upowszechnienie REST) oraz strategii platformy .NET (przejście na .NET Core i technologie cross-platform), WCF stopniowo odszedł w cień. Dziś uchodzi za legacy, coś, co warto znać z racji istniejącego kodu w firmach, ale czego raczej nie użyjemy w nowych projektach.
Jeśli zaczynasz przygodę z .NET, skup się na nowszych technologiach jak ASP.NET Core i gRPC, a o WCF warto wiedzieć w kontekście historycznym. Sam, prowadząc od lat szkolenia, zauważyłem, że początkującym programistom łatwiej wejść w świat .NET poprzez aktualne narzędzia niż przez starsze, bardziej skomplikowane frameworki. Dlatego w moim szkoleniu online Zostań Programistą .NET koncentrujemy się na nowoczesnym stacku .NET - pokazuję tam cały proces od zera, jak w 15 tygodni nauczyć się praktycznych umiejętności tworzenia aplikacji. Wspominam też o technologiach takich jak WCF dla kontekstu, ale największy nacisk kładziemy na to, co przyda Ci się dziś i jutro na rynku pracy. Jeśli więc chcesz wejść w świat .NET kompleksowo i z aktualną wiedzą, zachęcam do dołączenia do szkolenia. Powodzenia w nauce i pamiętaj - technologia się zmienia, fundamenty dobrej architektury pozostają te same.