Skip to content

ch13 samples - #35

Merged
christiannagel merged 15 commits into
mainfrom
ch13
Aug 26, 2026
Merged

ch13 samples#35
christiannagel merged 15 commits into
mainfrom
ch13

Conversation

@christiannagel

Copy link
Copy Markdown
Collaborator

No description provided.

- Added GRPC.AppHost with Aspire orchestration for service/client
- Introduced GRPC.ServiceDefaults for telemetry, health, discovery, resilience
- Updated BookCatalogService with thread-safe in-memory catalog and improved sample data
- Enhanced catalog.proto for all gRPC call patterns (unary, streaming, bidi)
- Implemented GRPCClient Runner demonstrating all gRPC patterns with error handling
- Updated projects to .NET 10.0, unified ServiceDefaults, and NuGet packages
- Added Aspire config files for orchestration, logging, and environment
- Both service and client use AddServiceDefaults for consistency
- BookCatalogService now replaces GreeterService in gRPC API
- Enforce predefined types for locals, params, members, and access
- Remove mandatory var usage for built-in types and elsewhere
- Keep throw expressions disallowed
- Set CA1856 (ValueTask) severity to error
- Remove CA2007 (ConfigureAwait) and CA2008 (TaskScheduler) rules
- Disable IDE0011 (curly braces) by setting severity to none
- Update file header template to reference "Expert CSharp Programming" and MIT License
Copilot AI lite review requested due to automatic review settings August 26, 2026 17:11
@christiannagel
christiannagel merged commit 1e132e7 into main Aug 26, 2026
1 check passed
@christiannagel
christiannagel deleted the ch13 branch August 26, 2026 17:12

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Chapter 13 sample code focused on modern streaming and real-time communication patterns in .NET (SSE, SignalR streaming, gRPC streaming), along with supporting Aspire defaults and a set of small console samples (channels, pipelines, serialization).

Changes:

  • Introduces new ch13 sample solutions/projects for SSE, SignalR, and gRPC (service + client + Aspire AppHost) plus supporting “ServiceDefaults”.
  • Adds additional streaming-focused console samples (Channels, Pipelines, MemoryStream) and a JsonSerialization sample (including source-gen context and a custom converter).
  • Updates central package versions to include gRPC/YARP packages and bumps several Microsoft/OpenTelemetry package versions.

Reviewed changes

Copilot reviewed 109 out of 207 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
global.json Removes SDK pinning for the repository.
Directory.Packages.props Adds/bumps package versions for gRPC, YARP, SignalR, OpenTelemetry, and some ASP.NET packages.
ch13/SSE/SSE.Service/SSE.Service.http Adds HTTP scratch file for SSE.Service.
ch13/SSE/SSE.Service/SSE.Service.csproj Adds SSE service project targeting net10.0 (currently includes YARP ref).
ch13/SSE/SSE.Service/Properties/launchSettings.json Adds launch profiles for SSE.Service.
ch13/SSE/SSE.Service/Program.cs Implements /stocks/{symbol} SSE endpoint streaming stock ticks.
ch13/SSE/SSE.Service/appsettings.json Adds SSE.Service logging/hosts config.
ch13/SSE/SSE.Service/appsettings.Development.json Adds SSE.Service dev logging config.
ch13/SSE/SSE.Blazor/SSE.Blazor/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css Adds Bootstrap reboot RTL minified asset.
ch13/SSE/SSE.Blazor/SSE.Blazor/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css Adds Bootstrap reboot RTL asset.
ch13/SSE/SSE.Blazor/SSE.Blazor/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css Adds Bootstrap reboot minified asset.
ch13/SSE/SSE.Blazor/SSE.Blazor/wwwroot/app.css Adds app stylesheet for SSE.Blazor host.
ch13/SSE/SSE.Blazor/SSE.Blazor/SSE.Blazor.csproj Adds SSE.Blazor host project targeting net10.0.
ch13/SSE/SSE.Blazor/SSE.Blazor/Properties/launchSettings.json Adds launch profiles for SSE.Blazor host.
ch13/SSE/SSE.Blazor/SSE.Blazor/Program.cs Configures Blazor host + YARP forwarding /api/** to SSE.Service (SSE-friendly timeout).
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/Routes.razor Adds router setup for SSE.Blazor host.
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/Pages/Weather.razor Adds sample “Weather” page (stream rendering).
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/Pages/NotFound.razor Adds not-found page.
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/Pages/Home.razor Adds home page.
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/Pages/Error.razor Adds error page.
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/Layout/NavMenu.razor.css Adds nav menu styling.
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/Layout/NavMenu.razor Adds nav menu component.
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/Layout/MainLayout.razor.css Adds main layout styling.
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/Layout/MainLayout.razor Adds main layout component.
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/App.razor Adds app shell markup.
ch13/SSE/SSE.Blazor/SSE.Blazor/Components/_Imports.razor Adds Razor imports for host components.
ch13/SSE/SSE.Blazor/SSE.Blazor/appsettings.json Adds host logging/hosts config.
ch13/SSE/SSE.Blazor/SSE.Blazor/appsettings.Development.json Adds host dev logging config.
ch13/SSE/SSE.Blazor/SSE.Blazor.Client/wwwroot/appsettings.json Adds client logging config.
ch13/SSE/SSE.Blazor/SSE.Blazor.Client/wwwroot/appsettings.Development.json Adds client dev logging config.
ch13/SSE/SSE.Blazor/SSE.Blazor.Client/SSE.Blazor.Client.csproj Adds WASM client project targeting net10.0.
ch13/SSE/SSE.Blazor/SSE.Blazor.Client/Program.cs Adds WASM client startup wiring an HttpClient.
ch13/SSE/SSE.Blazor/SSE.Blazor.Client/Pages/Stocks.razor Adds SSE client UI + SSE parsing logic.
ch13/SSE/SSE.Blazor/SSE.Blazor.Client/Pages/Counter.razor Adds counter page.
ch13/SSE/SSE.Blazor/SSE.Blazor.Client/Models/StockTick.cs Adds client StockTick model matching service record.
ch13/SSE/SSE.Blazor/SSE.Blazor.Client/_Imports.razor Adds Razor imports for SSE client.
ch13/SSE/SSE.AppHost/SSE.AppHost.csproj Adds Aspire AppHost project for SSE sample.
ch13/SSE/SSE.AppHost/Properties/launchSettings.json Adds AppHost launch profiles.
ch13/SSE/SSE.AppHost/aspire.config.json Adds Aspire config for SSE.AppHost.
ch13/SSE/SSE.AppHost/appsettings.json Adds AppHost logging config.
ch13/SSE/SSE.AppHost/appsettings.Development.json Adds AppHost dev logging config.
ch13/SSE/SSE.AppHost/AppHost.cs Wires SSE.Service and SSE.Blazor into a distributed application.
ch13/SignalR/SignalR.Service/SignalR.Service.csproj Adds SignalR service project targeting net10.0.
ch13/SignalR/SignalR.Service/Properties/launchSettings.json Adds SignalR.Service launch profiles.
ch13/SignalR/SignalR.Service/Program.cs Configures SignalR hub endpoint + minimal landing route.
ch13/SignalR/SignalR.Service/MarketHub.cs Adds streaming hub method producing stock ticks.
ch13/SignalR/SignalR.Service/appsettings.json Adds SignalR.Service logging/hosts config.
ch13/SignalR/SignalR.Service/appsettings.Development.json Adds SignalR.Service dev logging config.
ch13/SignalR/SignalR.Blazor/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css Adds Bootstrap reboot RTL minified asset.
ch13/SignalR/SignalR.Blazor/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css Adds Bootstrap reboot RTL asset.
ch13/SignalR/SignalR.Blazor/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css Adds Bootstrap reboot minified asset.
ch13/SignalR/SignalR.Blazor/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css Adds Bootstrap reboot asset.
ch13/SignalR/SignalR.Blazor/wwwroot/app.css Adds app stylesheet for SignalR.Blazor host.
ch13/SignalR/SignalR.Blazor/SignalR.Blazor.csproj Adds SignalR.Blazor host project targeting net10.0.
ch13/SignalR/SignalR.Blazor/Properties/launchSettings.json Adds launch profiles for SignalR.Blazor host.
ch13/SignalR/SignalR.Blazor/Program.cs Configures Blazor host + forwarder routes for /marketHub to SignalR.Service.
ch13/SignalR/SignalR.Blazor/Components/Routes.razor Adds router setup for SignalR.Blazor host.
ch13/SignalR/SignalR.Blazor/Components/Pages/Weather.razor Adds sample “Weather” page (stream rendering).
ch13/SignalR/SignalR.Blazor/Components/Pages/NotFound.razor Adds not-found page.
ch13/SignalR/SignalR.Blazor/Components/Pages/Home.razor Adds home page.
ch13/SignalR/SignalR.Blazor/Components/Pages/Error.razor Adds error page.
ch13/SignalR/SignalR.Blazor/Components/Layout/NavMenu.razor.css Adds nav menu styling.
ch13/SignalR/SignalR.Blazor/Components/Layout/NavMenu.razor Adds nav menu component.
ch13/SignalR/SignalR.Blazor/Components/Layout/MainLayout.razor.css Adds main layout styling.
ch13/SignalR/SignalR.Blazor/Components/Layout/MainLayout.razor Adds main layout component.
ch13/SignalR/SignalR.Blazor/Components/App.razor Adds app shell markup.
ch13/SignalR/SignalR.Blazor/Components/_Imports.razor Adds Razor imports for host components.
ch13/SignalR/SignalR.Blazor/appsettings.json Adds host logging/hosts config.
ch13/SignalR/SignalR.Blazor/appsettings.Development.json Adds host dev logging config.
ch13/SignalR/SignalR.Blazor.Client/wwwroot/appsettings.json Adds client logging config.
ch13/SignalR/SignalR.Blazor.Client/wwwroot/appsettings.Development.json Adds client dev logging config.
ch13/SignalR/SignalR.Blazor.Client/SignalR.Blazor.Client.csproj Adds WASM client project targeting net10.0 + SignalR client package.
ch13/SignalR/SignalR.Blazor.Client/Program.cs Adds WASM client startup.
ch13/SignalR/SignalR.Blazor.Client/Pages/Stocks.razor Adds SignalR streaming client UI using HubConnection.StreamAsync.
ch13/SignalR/SignalR.Blazor.Client/Pages/Counter.razor Adds counter page.
ch13/SignalR/SignalR.Blazor.Client/Models/StockTick.cs Adds client StockTick model.
ch13/SignalR/SignalR.Blazor.Client/_Imports.razor Adds Razor imports for SignalR client.
ch13/SignalR/SignalR.AppHost/SignalR.AppHost.csproj Adds Aspire AppHost project for SignalR sample.
ch13/SignalR/SignalR.AppHost/Properties/launchSettings.json Adds AppHost launch profiles.
ch13/SignalR/SignalR.AppHost/aspire.config.json Adds Aspire config for SignalR.AppHost.
ch13/SignalR/SignalR.AppHost/appsettings.json Adds AppHost logging config.
ch13/SignalR/SignalR.AppHost/appsettings.Development.json Adds AppHost dev logging config.
ch13/SignalR/SignalR.AppHost/AppHost.cs Wires SignalR.Service and SignalR.Blazor into a distributed application.
ch13/README.md Adds chapter README (currently mismatched content).
ch13/PipelinesSample/Program.cs Adds pipelines sample demonstrating high-throughput line reading.
ch13/PipelinesSample/PipelinesSample.csproj Adds pipelines sample project targeting net10.0.
ch13/MemoryStreamSample/Program.cs Adds MemoryStream sample demonstrating in-memory read/write.
ch13/MemoryStreamSample/MemoryStreamSample.csproj Adds MemoryStream sample project targeting net10.0.
ch13/JsonSerialization/Runner.cs Adds serialization demo runner (reflection vs source-gen, paging, streaming, perf).
ch13/JsonSerialization/Program.cs Wires JsonSerialization runner entrypoint.
ch13/JsonSerialization/Models/PagedResult.cs Adds generic paging result model.
ch13/JsonSerialization/Models/Money.cs Adds Money value object used by the sample.
ch13/JsonSerialization/Models/Library.cs Adds library domain model.
ch13/JsonSerialization/Models/Book.cs Adds book domain model + JsonIgnore computed property.
ch13/JsonSerialization/JsonSerialization.csproj Adds JsonSerialization sample project targeting net10.0.
ch13/JsonSerialization/Data/LibraryJsonContext.cs Adds System.Text.Json source-gen context for AOT-safe serialization.
ch13/JsonSerialization/Converters/MoneyJsonConverter.cs Adds Money JsonConverter with validation/error messages.
ch13/GRPC/GRPCService/Services/BookCatalogService.cs Adds gRPC service implementing unary + server/client/bidi streaming.
ch13/GRPC/GRPCService/Protos/catalog.proto Adds gRPC proto contract for catalog service.
ch13/GRPC/GRPCService/Properties/launchSettings.json Adds GRPCService launch profiles.
ch13/GRPC/GRPCService/Program.cs Configures gRPC service hosting.
ch13/GRPC/GRPCService/GRPCService.csproj Adds gRPC service project targeting net10.0 + protobuf tooling.
ch13/GRPC/GRPCService/appsettings.json Configures Kestrel Http2 defaults for gRPC.
ch13/GRPC/GRPCService/appsettings.Development.json Adds GRPCService dev logging config.
ch13/GRPC/GRPCClient/Runner.cs Adds gRPC client runner for all RPC variants + size comparison.
ch13/GRPC/GRPCClient/Program.cs Adds gRPC client host startup and call sequencing.
ch13/GRPC/GRPCClient/GRPCClient.csproj Adds gRPC client project targeting net10.0 + client-side protobuf link.
ch13/GRPC/GRPCClient/appsettings.json Adds service-discovery config for grpcservice endpoint.
ch13/GRPC/GRPC.AppHost/Properties/launchSettings.json Adds GRPC AppHost launch profiles.
ch13/GRPC/GRPC.AppHost/GRPC.AppHost.csproj Adds Aspire AppHost for gRPC sample.
ch13/GRPC/GRPC.AppHost/appsettings.json Adds AppHost logging config.
ch13/GRPC/GRPC.AppHost/appsettings.Development.json Adds AppHost dev logging config.
ch13/GRPC/GRPC.AppHost/AppHost.cs Wires GRPCService and GRPCClient into a distributed application.
ch13/GRPC/aspire.config.json Adds Aspire config pointing at GRPC.AppHost.
ch13/Common/ServiceDefaults/ServiceDefaults.csproj Adds shared Aspire defaults project for services.
ch13/Common/ServiceDefaults/Extensions.cs Adds ServiceDefaults extension methods (health checks, discovery, OTel).
ch13/Common/Blazor.ServiceDefaults/wwwroot/Blazor.ServiceDefaults.lib.module.js Adds JS module to load injected client config for WASM.
ch13/Common/Blazor.ServiceDefaults/Extensions.cs Adds Blazor WASM client “service defaults” + OTel exporter workaround.
ch13/Common/Blazor.ServiceDefaults/Blazor.ServiceDefaults.csproj Adds Blazor.ServiceDefaults library project (targets net11.0).
ch13/Common/Blazor.ServiceDefaults/BackgroundExportHandler.cs Adds DelegatingHandler to avoid sync-over-async OTLP export deadlocks on WASM.
ch13/ch13.slnx Adds Chapter 13 solution definition for all included projects.
ch13/AsyncStreamingChannels/Program.cs Adds channels sample (fan-out pub/sub + throughput benchmark).
ch13/AsyncStreamingChannels/AsyncStreamingChannels.csproj Adds channels sample project targeting net10.0.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread ch13/README.md
Comment on lines +1 to +5
# Chapter 12 - Concurrency and Multithreading

This chapter requires the .NET 10 SDK to be installed.

The projects of this chapter are:
Comment on lines +1 to +2
@page "/stocks"
@rendermode InteractiveWebAssembly
Comment on lines +9 to +12
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" />
<PackageReference Include="Yarp.ReverseProxy" />
</ItemGroup>

namespace GRPCService.Services;

// <summary>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants