WCF servisi na .NET-u 10: CoreWCF, gRPC ili REST?
WCF je najčešća prepreka pri prelasku s .NET Frameworka. Tri puta dalje, što se u kojem mijenja za klijente i redoslijed u kojem sve nastavlja raditi.
Vlado Pandžić · Osnivač · Senior .NET arhitekt
Objavljeno · 3 min čitanja
Sadržaj
U gotovo svakoj migraciji s .NET Frameworka jedna stavka zaustavi plan: WCF servisi. Sama aplikacija bi prešla, ali WCF nije dio modernog .NET-a, a drugi sustavi, ponekad i oni koje ne kontrolirate, svaki dan ovise o tim servisima.
Dobra vijest: postoje tri provjerena puta, i ne morate odjednom birati jedan za sve.
Što je problem, a što nije
- Pozivanje WCF servisa iz .NET-a 10 nije problem. Microsoft održava WCF klijentske biblioteke za moderni .NET, a
dotnet-svcutilgenerira klijentski kod iz opisa servisa, kao i prije. - Hostanje WCF servisa je problem. Serverski dio WCF-a nikad nije prenesen na .NET Core i njegove nasljednike. Svaki servis koji vaša aplikacija nudi treba novi dom.
Tri puta dalje
| CoreWCF | gRPC | REST API | |
|---|---|---|---|
| Što je | Port WCF-a na moderni .NET | Brz protokol preko HTTP/2, s ugovorom na prvom mjestu | ASP.NET Core Web API s JSON-om |
| Što se mijenja za klijente | Obično ništa | Novi klijentski kod | Novi klijentski kod |
| Vaš postojeći kod | Ugovori i implementacija većinom ostaju | Sloj servisa se prepisuje | Sloj servisa se prepisuje |
| Najbolje odgovara | Prelazak na .NET 10 bez diranja korisnika servisa | Pozivi između vaših vlastitih sustava | Korisnici koje ne kontrolirate, preglednici, druge platforme |
| Na što paziti | Nisu podržane sve WCF mogućnosti | Preglednicima treba gRPC-Web | Više posla za isti ugovor |
CoreWCF je projekt otvorenog koda koji Microsoft podržava. Podrška prati verziju .NET-a na kojoj radi, a verzija 1.9 podržava .NET 10.
CoreWCF: isti ugovor na .NET-u 10
Uz CoreWCF ugovor servisa ostaje kakav jest, a servis radi unutar obične ASP.NET Core aplikacije:
[ServiceContract]
public interface IOrderService
{
[OperationContract]
Task<OrderDto> GetOrderAsync(int id);
}
builder.Services.AddServiceModelServices();
var app = builder.Build();
app.UseServiceModel(services =>
{
services.AddService<OrderService>();
services.AddServiceEndpoint<OrderService, IOrderService>(
new BasicHttpBinding(), "/OrderService.svc");
});
Klijenti i dalje zovu istu adresu s istim porukama. Za sustave koji ovise o vama ništa se ne mijenja, a upravo to često omogući cijelu migraciju.
Što provjeriti prije odluke
- Bindinzi. Uobičajeni HTTP i TCP bindinzi su pokriveni. Rjeđe treba provjeriti u CoreWCF dokumentaciji prije nego se obvežete.
- Sigurnost. Windows autentifikacija, sigurnost poruka i certifikati često traju dulje od samog koda.
- Duplex i povratni pozivi. Servise koji zovu klijenta natrag teže je prenijeti, kojim god putem išli.
- Tko su korisnici servisa. Vaše aplikacije mogu se mijenjati zajedno sa servisom. Sustav partnera ili uređaj na terenu obično ne mogu, i za njih je CoreWCF često jedini realan prvi korak.
Redoslijed koji radi
- Korak 1Popis: servisi, bindinzi, korisnici
- Korak 2CoreWCF na .NET-u 10, klijenti bez promjena
- Korak 3Novi gRPC ili REST endpointi uz stare
- Korak 4Korisnik po korisnik, pa gašenje
Prvi korak dovodi aplikaciju na podržani .NET, a da nitko drugi ne mora ništa mijenjati. Nakon toga novi endpointi mogu raditi uz stare, a svaki korisnik prelazi kad mu odgovara. WCF endpoint gasi se tek kad ga više nitko ne zove, a to će vam reći logovi.
Koliko traje
Okvirni rasponi:
- nekoliko servisa na osnovnim HTTP bindinzima, koje koriste vaše aplikacije: nekoliko dana do CoreWCF-a
- puno servisa s Windows autentifikacijom, certifikatima i vanjskim korisnicima: nekoliko tjedana
- potpuni prelazak na gRPC ili REST: ovisi o broju korisnika servisa, više nego o samim servisima
WCF je obično dio veće selidbe. Cijelu sliku daje članak o prelasku s .NET Frameworka na .NET 10, a podatkovni sloj članak o migraciji s EF6 na EF Core.
Kako mi radimo
Upravo ovo radimo. ProCoding je .NET studio iz Splita, a starije .NET aplikacije prebacujemo na moderni .NET dio po dio, tako da cijelo vrijeme rade: servise, podatkovni sloj i ekrane. Počinjemo popisom i predlažemo redoslijed. Sami, s vašim timom ili kao freelance .NET developer u vašem timu. Prvi korak je besplatan razgovor od 30 minuta.
Izvori
- CoreWCF support policy, Microsoft
- CoreWCF, GitHub
- WCF client libraries for .NET, GitHub
- WCF dotnet-svcutil tool, Microsoft Learn
- gRPC on .NET, Microsoft Learn
Ovaj članak služi općem informiranju i nije pravni, porezni, financijski ni drugi stručni savjet. Scenariji, primjeri i izračuni su ilustrativni. Uvjeti korištenja i odricanje od odgovornosti.