Strangling SOAP: migrate to modern .NET without breaking clients

The Strangler Fig pattern is one of those transitional architecture patterns to get to a better system. But strangling SOAP is a bit difficult. If you just put a proxy in front of a SOAP service, you’ll quickly bump into a painful detail: SOAP typically exposes a single HTTP endpoint. All operations share one path, and the actual method is picked using headers like SOAPAction or action and the body contents. That makes the usual reverse‑proxy trick an “all or nothing” mechanism. Not at all a Strangler Fig approach. But there is a way! ...

20 November 2025 · 6 min · Jos Hendriks

Playwright in a single file dotnet app

One of the recent additions in .NET is that you can now have single file projects. In this article we’ll explore how to use Playwright in such file. TL;DR: Full example at the end of this page. Why? More and more I use Playwright not only for testing but also for small automation scripts and to quickly make demos using it’s handy built-in recorder. Before .NET 10 that would required a C# project, a directory with a csproj file a cs file and the Playwright package installed. ...

14 November 2025 · 3 min · Jos Hendriks

Stryker in a CI/CD pipeline

In my last blog I wrote about why mutation testing is a better way of measuring test completeness. I also mentioned the drawback regarding performance. In this blog I’d like to discuss what Stryker does to increase performance and the things you can do in your pipeline to get the most out of mutations testing every check-in. What stryker already does Concurrency By default Stryker takes half of the available cores to do the work. Use the concurrency to use more or less cores of you system. I tested this on a 8 core machine. When using 4 core the whole process takes 02:42. Whit 8 cores that same process took almost 30 seconds less, 02:18. ...

10 February 2024 · 5 min · Jos Hendriks

Use mutation testing to replace code coverage

It is pretty common to use some sort of code coverage measurement tool along with unit tests to gather feedback on completeness of your test suite. Measuring code coverage is great start to find out if your code needs more testing. But by it’s nature it also comes with some caveats. In this article I’ll explain these caveats and how mutation testing fills these caps and turns out more valuable as a source of feedback. ...

2 February 2024 · 5 min · Jos Hendriks

Simplifying .NET solution upgrades with Directory.Build.props and Directory.Packages.props

With .NET 8 almost released it is time to make upgrading easier. In this blog I’ll explain about Directory.Build.props and Directory.Packages.props and how these can make upgrading easier. Most solutions consist of multiple projects. Even if all of your production code is in a single project chances are that your tests are in a different project. The separation that projects bring can be great, but sometimes managing dependencies can be a hassle. ...

23 October 2023 · 3 min · Jos Hendriks