ch13 samples - #35
Merged
Merged
Conversation
- 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
There was a problem hiding this comment.
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 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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.