.NET 5.0 Mind Your Strings with .NET 5.0 In the process of upgrading a library to support .NET 5.0, I ran into a rather bizarre test failure. Simply by adding a new target of net5.0 in the library and unit tests, single test started to fail. It was absolutely baffling to me, leading my to think
MediatR MediatR 9.0 Released A small release, from the release notes: This release contains a small, but breaking change. In order to provide a simpler interface, the IMediator interface is now split into two interfaces, a sender and publisher: public interface ISender { Task<TResponse> Send<TResponse>(IRequest<TResponse>
Constrained Open Generics Support Merged in .NET Core DI Container Continuing the trend of extremely long blog titles...years ago I opened a pull request for supporting constrained open generics in the built-in Microsoft.Extensions.DependencyInjection container. And another. And another....and another. But I did not give up hope - after porting through a couple repo moves and consolidations,
Distributed Systems Diagnostics and Instrumentation Packages Targeting Open Telemetry Beta for MongoDB and NServiceBus Published That's...a long title. I've published release packages for System.Diagnostics support for NServiceBus and MongoDB: * NServiceBus.Extensions.Diagnostics * MongoDB.Driver.Core.Extensions.DiagnosticSources And published new beta packages targeting the beta release of OpenTelemetry: * NServiceBus.Extensions.Diagnostics.OpenTelemetry * MongoDB.Driver.Core.Extensions.OpenTelemetry The Diagnostics
NServiceBus End-to-End Integration Testing with NServiceBus: How It Works In my last post, I walked through setting up end-to-end integration testing with NServiceBus, and how we can use it to black box test message endpoints similar to how the ASP.NET Core integration testing works. In this post, I want to walk through how it all works underneath the
NServiceBus End-to-End Integration Testing with NServiceBus One of the interesting side effects of adding diagnostic events to infrastructure is that you can now "listen in" to what's going on in your applications for black box testing. This can be especially useful in scenarios where you're building on top of a
Personal Becoming a Technical Fellow at Headspring, and New Beginnings My journey at Headspring started for me at a local developer meetup, the "Austin Agile Lunch" group, way back in 2007. I had started blogging and getting involved in the community, attending the local .NET user group, code camp, and most influentially, the first ALT.NET open space
Microservices Building End-to-End Diagnostics: User-Defined Context with Correlation Context Posts in this series: * An Intro * Trace Context * Diagnostic Events * OpenTelemetry Integration * Activity and Span Correlation * Visualization with Exporters * User-Defined Context with Correlation Context * ActivitySource and OpenTelemetry 1.0 Source Code With a brief detour to push out some NuGet packages, I wanted to pick up with a common issue
Distributed Systems Diagnostics and Instrumentation Packages for MongoDB and NServiceBus Published As part of the end-to-end diagnostics and tracing blog series, I had an end goal of eventually publishing out NuGet packages for diagnostics (Activity and DiagnosticSource). I'm happy to announce that I've released 4 packages to NuGet: * NServiceBus.Extensions.Diagnostics * NServiceBus.Extensions.Diagnostics.OpenTelemetry * MongoDB.Driver.
Microservices Building End-to-End Diagnostics: Visualization with Exporters Posts in this series: * An Intro * Trace Context * Diagnostic Events * OpenTelemetry Integration * Activity and Span Correlation * Visualization with Exporters * User-Defined Context with Correlation Context * ActivitySource and OpenTelemetry 1.0 Source Code In the last post, we looked at surfacing our diagnostics events from the Activity and DiagnosticSource APIs on through
Microservices Building End-to-End Diagnostics: Activity and Span Correlation Posts in this series: * An Intro * Trace Context * Diagnostic Events * OpenTelemetry Integration * Activity and Span Correlation * Visualization with Exporters * User-Defined Context with Correlation Context * ActivitySource and OpenTelemetry 1.0 Source Code In the last post, we looked at hooking up our diagnostics events (and Activities) to OpenTelemetry, where our main
Microservices Building End-to-End Diagnostics: OpenTelemetry Integration Posts in this series: * An Intro * Trace Context * Diagnostic Events * OpenTelemetry Integration * Activity and Span Correlation * Visualization with Exporters * User-Defined Context with Correlation Context * ActivitySource and OpenTelemetry 1.0 Source Code In the last post, we looked at providing diagnostic event hooks into our code at specific points so that
Microservices Building End-to-End Diagnostics and Tracing: Diagnostic Events Posts in this series: * An Intro * Trace Context * Diagnostic Events * OpenTelemetry Integration * Activity and Span Correlation * Visualization with Exporters * User-Defined Context with Correlation Context * ActivitySource and OpenTelemetry 1.0 Source Code In the last post, we looked at the W3C Trace Context standard, and how we can extend NServiceBus to
Microservices Building End-to-End Diagnostics and Tracing: Trace Context Posts in this series: * An Intro * Trace Context * Diagnostic Events * OpenTelemetry Integration * Activity and Span Correlation * Visualization with Exporters * User-Defined Context with Correlation Context * ActivitySource and OpenTelemetry 1.0 Source Code In the last post, I walked through the overall problem we run into with diagnosing issues in distributed systems
Microservices Building End-to-End Diagnostics and Tracing: An Intro Posts in this series: * An Intro * Trace Context * Diagnostic Events * OpenTelemetry Integration * Activity and Span Correlation * Visualization with Exporters * User-Defined Context with Correlation Context * ActivitySource and OpenTelemetry 1.0 Source Code As microservices introduced (forced) highly complex distributed systems into organizations, the tools required to operate these architectures needed to
NServiceBus NServiceBus and .NET Core Generic Host My current client is using .NET Core 2.x, with plans to upgrade to 3.x next month. As part of that system, we do quite a bit of messaging, with NServiceBus as the tool of choice to help make this easier. To get it working with our .NET Core
Testing Avoid In-Memory Databases for Tests A controversial GitHub issue came to my attention a couple of weeks ago around ditching the in-memory provider for Entity Framework Core. This seemed like a no-brainer to me - these database providers are far from trivial to maintain, even for in-memory strategies. It's something our teams learned
MongoDB Document-Level Pessimistic Concurrency in MongoDB In the last post, I got quite a few comments on some other ways to approach OCC. One pointed out that I wanted to explore was using a "SELECT...FOR UPDATE", which basically will grant an intent lock on the document in question. With an intent lock, we
Architecture Immutability in DTOs? Something that comes up every so often is the question of whether or not Data Transfer Objects should be immutable - that is, should our design of the classes and types of a DTO enforce immutability. To answer this question, we first need to look at what purpose a DTO
MediatR MediatR 8.0 Released This release brings some (minor) breaking changes to the public API. First, we added a non-generic overload to Send on IMediator: public interface IMediator { Task<TResponse> Send<TResponse>(IRequest<TResponse> request, CancellationToken cancellationToken = default); + Task<object> Send(object request, CancellationToken cancellationToken = default)
Docker User Secrets in Docker-based .NET Core Worker Applications As part of the recent Message Endpoints in Azure series, I wanted to check out the new .NET Core 3.0 Worker templates to see how the templates have improved the situation (actually, a lot), but there are still some things missing from the Worker SDK versus the Web SDK.
OSS Contoso University Vertical Slice App Updated to ASP.NET Core 3.0 To keep a running example of "how we do web apps", I've updated my Contoso University example app to ASP.NET Core 3.0. This sample app is just a re-jiggering of Microsoft's Contoso University Razor Pages sample app . It shows how we (Headspring)
MongoDB Document-Level Optimistic Concurrency in MongoDB I've had a number of projects now that have used MongoDB, and each time, I've needed to dig deep into the transaction support. But in addition to transaction support, I needed to understand the concurrency and locking models of Mongo. Unlike many other NoSQL databases, Mongo
Azure Building Messaging Endpoints in Azure: Functions Posts in this series: * Evaluating the Landscape * A Generic Host * Azure WebJobs * Azure Container Instances * Azure Functions * Azure Container Apps In our last post, we looked at deploying message endpoints in containers, eventually out to Azure Container Instances. While fairly straightforward, this approach is fairly close to Infrastructure-as-a-Service. I can
Azure Building Messaging Endpoints in Azure: Container Instances Posts in this series: * Evaluating the Landscape * A Generic Host * Azure WebJobs * Azure Container Instances * Azure Functions * Azure Container Apps In the last post, we looked at Azure WebJobs as a means of deploying messaging endpoints. And while that may work for smaller loads and simpler systems, as the number