Moving on from Windows Communication Foundation

What About Transactions?

2019-06-12 wcf Mark Rendle
A few people have asked about the alternative to WCF’s distributed transaction support, as implemented with [TransactionFlow] attributes and the .NET TransactionScope type. That built-in support for complex transaction management was one of the best features of WCF, but it’s also one of the reasons why a wholesale port to .NET Core is so difficult: under the covers, WCF’s transactions were managed by the Microsoft Distributed Transaction Coordinator (MSDTC), which is a Windows service and is integrated with Microsoft’s (and other vendors’) software when that software is running on Windows. Continue reading

WCF vs gRPC - Round 2

After my previous post comparing WCF to gRPC, a couple of people on Twitter and in the comments asked which WCF binding I had used for the performance comparison. The answer to that was “whatever the default binding is”, which is basic HTTP binding. As Clemens Vaster pointed out, that is not an “apples-to-apples” comparison, and a fairer WCF vs gRPC test would use NetTCP binding. So I re-ran my performance tests using NetTCP binding in a simple console host for the WCF service. Continue reading

Unix domain sockets on Windows

2019-05-27 networking Mark Rendle
I just found out from a tweet from David Fowler that Windows is getting support for Unix domain sockets, which is pretty amazing. Unix domain sockets are an inter-process communication (IPC) feature that use the file-system as an address space, and file-system permissions for security. Other than that, they generally work like regular network sockets. Lots of Linux software uses domain sockets for local connections; for example, Docker creates a /var/run/docker. Continue reading


One of the alternatives recommended by Microsoft for organizations looking for a migration path away from WCF on .NET Framework is gRPC: a low-overhead, high-performance, cross-platform RPC framework. The upcoming .NET Core 3.0 has first-class support for gRPC; out of the box, you can create a new project with dotnet new grpc. This creates an ASP.NET Core 3.0 project with the usual Program.cs (remember, ASP.NET Core apps are console apps) and Startup. Continue reading

Life after WCF

2019-05-16 Mark Rendle

At the //BUILD 2019 conference, Microsoft announced that after .NET Core 3.0 (which is due to be released in Q3 of 2019) the next major release would be called .NET 5. This is intended to prevent the extra confusion that might result from there being a .NET 4.x and a .NET Core 4.x existing in the same universe. But .NET 5 will be the evolution of .NET Core, not .NET Framework.

It seems pretty clear that the old .NET Framework is going into legacy support mode, and while Microsoft are committed to continuing to support it long into the future, with security updates and so forth, it is unlikely that there will be much innovation or development on the platform. With both WPF and Windows Forms being ported to .NET Core 3.0, and made open source like the rest of Core, the future of those technologies seems assured and the migration path should be straightforward.

Continue reading