What you will learn in Building Distributed Applications that Work
Design, debug, test, observe, secure, and deploy
Chapter by chapter
Chapter 1: Getting started with distributed systems and Aspire
The introduction explains why a multi-component application is difficult to run locally and how Aspire’s AppHost gives developers one place to model and work with it.
What you learn in chapter 1 →Chapter 2: Managing infrastructure components with containers and integrations
Introduces two ways to connect infrastructure components to Aspire applications and explains why service discovery matters when those components and services connect.
What you learn in chapter 2 →Chapter 3: Using database and storage components
The introduction explains why the e-commerce app needs databases and establishes that Aspire integration libraries support both relational and NoSQL databases.
What you learn in chapter 3 →Chapter 4: Adding order-tracking functionality with SignalR
The chapter introduces a delivery-tracking app whose map updates automatically as a driver moves, and identifies the two capabilities needed to build it.
What you learn in chapter 4 →Chapter 5: Building a ChatGPT clone with Aspire, Ollama, and Semantic Kernel
The introduction motivates a product-specific chat assistant and identifies Semantic Kernel and Ollama as tools for adding a self-hosted LLM to an Aspire application.
What you learn in chapter 5 →Chapter 6: Integration testing and monitoring
The chapter introduction explains why monitoring a running application matters and places it alongside predeployment testing as a way to improve resilience.
What you learn in chapter 6 →Chapter 7: Components for messaging and caching
Introduces how message brokers connect distributed services, how queued messages are processed, and how queue-based and topic-based delivery differ.
What you learn in chapter 7 →Chapter 8: Application security in Aspire
The chapter introduction explains why publicly accessible Aspire applications need security, why the approach is not tied to one identity provider, and why the dashboard needs separate protection.
What you learn in chapter 8 →Chapter 9: Deploying Aspire apps to production
Introduces the move from local Aspire orchestration to production deployment and previews the chapter’s topics.
What you learn in chapter 9 →Chapter 10: Adding legacy apps to Aspire and working with AI agents
The chapter introduction explains why existing applications and AI coding assistants matter to Aspire, while previewing migration and integration topics.
What you learn in chapter 10 →Concepts explained in this book
- service discoveryService discovery is a mechanism by which services locate the network endpoints of other services dynamically rather than relying on fixed addresses.
- distributed systemA distributed system is a system composed of multiple networked computing components that coordinate to provide shared behavior.
- authenticationAuthentication is the process of verifying the identity of a user or other principal.
- Aspire integration libraryA reusable library that connects an application framework to an external service or infrastructure component.
- openid connectOpenID Connect is an identity layer built on OAuth 2.0 that enables clients to verify user identity and obtain basic profile information.
- AspireAspire 9 is the ninth major release of the Aspire application framework.
- authorizationAuthorization is the process of determining which actions or resources an authenticated principal is permitted to access.
- deployment pipelineA software delivery pipeline is an automated sequence of steps for building, testing, or deploying software.
- health check endpointA health-check endpoint is an application endpoint that reports health or readiness information about the application.
- withreferenceWithReference() is an Aspire API method that adds a reference from one application resource to another.
- AddResourceAddResource is an Aspire builder method that registers a resource with the application orchestrator.
- Keycloak containerA Keycloak container is a containerized Keycloak instance that runs the identity and access management service.
- bind mountA bind mount maps a location in the host filesystem to a location in a container filesystem.
- database migrationA database migration is a controlled change to a database schema or associated database objects across application versions.
- infrastructure resourceAn infrastructure resource is a supporting component, such as a database, cache, or message broker, on which an application depends.
- distributed lockA distributed lock grants exclusive access to a shared resource across processes or application instances.
- Aspire dashboardThe web interface that presents the state and telemetry of resources in an Aspire application.
- ai coding assistantAn AI coding assistant helps users create, modify, explain, or review source code.
- schemaA database schema is the structure and organization of a database, including its tables and fields.
- MCPModel Context Protocol is a protocol for connecting language-model applications with external tools, data sources, and capabilities through a standardized interface.
- authentication schemeAn authentication scheme defines how an application reads and validates the current authenticated identity.
- challenge schemeA challenge scheme determines the authentication action taken when an unauthenticated user requests a protected resource.
- Razor attributeA Razor attribute is metadata attached to a Razor component or page that influences its framework-defined behavior.
- data transfer objectA data transfer object is a data-only structure that carries selected values across application or service boundaries.
- containerA container is an isolated runtime environment that packages an application with its dependencies while sharing the host operating system kernel.
- distributed cacheA distributed cache stores data for access by multiple processes or application instances.
- OAuthOAuth is an authorization framework that enables clients to obtain limited access to protected resources without handling the resource owner's credentials.
- monitoringMonitoring is the continuous collection and analysis of application and infrastructure signals to detect problems and assess operational behavior.
- observabilityObservability is the capability to infer the internal behavior and condition of a system from its externally emitted telemetry.
- message brokerA software system that mediates communication among applications or services by sending, receiving, and routing messages.
- aspirificationAspirification is the process of enrolling existing applications in Aspire orchestration.
- SignalR connectionA client-side communication object that configures and maintains a connection to a SignalR hub.
- connection stringA structured configuration value specifying how an application connects to a database.
- identity providerAn identity provider is a system that authenticates principals and supplies identity information and access-related assertions to applications.
- single sign-onSingle sign-on is an authentication mechanism that lets a user access multiple applications after authenticating once.
- hubA SignalR abstraction that exposes methods for real-time communication between a server and connected clients.
- migrationMigration is the process of adapting an existing software system or project to another platform version or environment.
- ASP.NET Core SignalRSignalR is a .NET library for real-time web communication between clients and servers, including bidirectional message delivery.
- AddDatabaseAddDatabase is a .NET Aspire hosting API method that registers or creates a database associated with a database server resource.
- health checkA health check is an automated assessment of whether an application or dependency is ready and functioning sufficiently for interaction.
- Aspire.Hosting.SqlServerA .NET Aspire hosting integration package for provisioning and configuring SQL Server resources.
- waitforWaitFor() is an Aspire API method that delays a resource's startup until another resource is ready.
- MCP serverAn MCP server is a software component that exposes tools, resources, or contextual information to a language model through the Model Context Protocol.
- Azure Storage QueuesAn Azure service that stores messages in queues for asynchronous exchange between services.
- service defaultsService defaults are reusable Aspire startup conventions and settings that provide common capabilities to application services.
- AI agentAn AI agent uses artificial intelligence to perceive context, make decisions, or perform tasks.
- NoSQL databaseA non-relational database system that stores and accesses data using models other than relational tables and does not rely primarily on SQL.
- OllamaOllama is software for downloading, running, and serving large language models locally.
- Semantic KernelSemantic Kernel is a collection of .NET libraries that provides interfaces for integrating large language models with application code.
- authorization code flowThe authorization code flow is an OAuth-based protocol in which a client exchanges an authorization code for tokens through a server-side interaction.
- Proof Key for Code ExchangeProof Key for Code Exchange is an OAuth security extension that binds an authorization-code exchange to the client that initiated it.
- DockerDocker is a platform for building, packaging, and running applications in containers.
- persistent lifetimeA persistent lifetime is a resource-lifecycle setting that preserves a resource instance for reuse across application runs.
- Aspire testing libraryAspire.Hosting.Testing is a .NET package that provides components for testing Aspire applications.
- JavaScript interopJavaScript interop is a mechanism for communication between .NET code in Blazor and JavaScript code running in the browser.
- MongoDBMongoDB is a document-oriented NoSQL database management system.
- distributed cachingDistributed caching stores frequently accessed data in a shared cache accessible across multiple servers or nodes.
- load balancingThe distribution of incoming traffic across multiple service instances or resources.
- BicepBicep is a declarative domain-specific language for deploying Azure resources through infrastructure-as-code templates.
- RabbitMQRabbitMQ is an open-source message broker that routes messages between producers and consumers.
- OpenLayersOpenLayers is an open-source JavaScript library for displaying and interacting with maps in web applications.
- configurationThe set of settings that determines how a software resource runs and connects to other resources.
- EnsureCreatedEnsureCreated is an Entity Framework method that creates the database if it does not already exist.
- ConnectionStrings sectionA named section of .NET application settings that holds database connection strings.
- RedisRedis is an in-memory data structure store commonly used as a database, cache, and message broker.
These guides are generated from the text of Manning books by Manning's knowledge graph and link to the sections they draw on. The full books are available on liveBook and at manning.com.
