Hello! This is the online handbook for Dylan Beattie’s workshop Distributed Systems with .NET.
- Getting Started
All the examples in this workshop are based on Autobarn, a fictional website for listing used cars for sale. In this module, we'll get the Autobarn project running locally, and take a look at the project structure to see how it all fits together.
- 1. Introducing Autobarn
In this module, we'll explore the Autobarn solution: a small ASP.NET Core MVC website for listing second-hand cars, which every later module builds on.
- 2. Sample Data
In this module, we'll load sample data from embedded CSV files, so Autobarn starts up with thousands of makes, models and vehicles instead of an empty database.
- 3. A Simple HTTP API
In this module, we'll add a simple HTTP API to Autobarn using ASP.NET Core minimal APIs, returning the same data as the website in JSON format.
- 4. OpenAPI and Scalar
In this module, we'll make the Autobarn API describe itself by generating an OpenAPI document, and use Scalar to create an interactive API reference.
- 5. Introducing Hypermedia
In this module, we'll rebuild the Autobarn API around hypermedia, adding a discovery endpoint, links to related resources, and paginated collections.
- 6. Create an HTTP Client: Exercise
In this exercise, you'll build a console application that uses the Autobarn API by following hypermedia links from the discovery endpoint.
- 6. Create an HTTP Client: Solution
The worked solution to the API client exercise: a console application that navigates the Autobarn API by following hypermedia links, paging through collections and caching the results.
- 7. HTTP POST
In this module, we'll add the first write operation to the Autobarn API, using HTTP POST to create new vehicles and returning the appropriate status codes.
- 8. Post a Random Vehicle: Exercise
In this exercise, you'll extend the Autobarn API client to create random vehicles using HTTP POST, and handle the different responses the API can return.
- 8. Post a Random Vehicle: Solution
The worked solution to the random vehicle exercise: extending the console client to POST randomly generated vehicles and handle 201, 400 and 409 responses.
- 9: Message Queues and Pub/Sub
In this module, we'll look at message queues and the publish/subscribe pattern, and add a simple message queue and handler to Autobarn.
- 10: Introducing Aspire
In this module, we'll introduce .NET Aspire, and see how it helps us orchestrate, configure and monitor the services that make up a distributed application.
- 11: Protocol Buffers and gRPC
In this module, we'll add a gRPC client and server to our application, and see how we can use Protocol Buffers to implement high-performance remote procedure calls.
- 12: Browser Notifications with SignalR
In this module, we'll use SignalR to add real-time browser notifications to our application.
- 13: Putting it All Together
In this module, we'll combine everything we've looked at in previous modules to build a real-time notification system that uses HTTP, gRPC, message queues and SignalR notifications.
- 14: Hosting Dependencies with Docker
In this module, we'll look at Docker, and how you can use it to host dependencies for your .NET applications and microservices
- 15: Using Docker to build and host .NET applications
In this module, we'll look at Docker, and how you can use it to build and run your .NET applications and microservices
- 16: Further Exercises
Extra exercises and services you can add to the Autobarn application to get further experience of working with distributed applications
- Appendix A: Creating a Self-Signed SSL Certificate for localhost
How to use OpenSSL to create a self-signed certificate so you can run servers on localhost using https
- Appendix B: Creating a gRPC Server in Python
Building a gRPC server using Python and grpcio-tools that can communicate with the .NET PricingClient.