Link Search Menu Expand Document

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.