.NET Aspire support for Azure SignalR Service
In this article, you learn how to use .NET Aspire to express an Azure SignalR Service resource. Demonstrating how to write a SignalR app is beyond the scope of this article. Instead, you explore an app that's already been written and how it's wired up with .NET Aspire. Like other Azure resources within the .NET Aspire app model, you benefit from simple provisioning and deployment with the Azure Developer CLI (azd
). For more information, see Deploy a .NET Aspire project to Azure Container Apps using the azd
(in-depth guide).
Hub host
The hub host project is where you host your SignalR hub, the project that calls AddSignalR() and MapHub for example.
Install the NuGet package
You need to install the 📦 Microsoft.Azure.SignalR NuGet package.
dotnet add package Microsoft.Azure.SignalR
For more information, see dotnet add package or Manage package dependencies in .NET applications.
Express the resource
Whichever project you're using to host your Hub is where you'll wire up your Azure SignalR Service resource. The following example demonstrates how to use the AddNamedAzureSignalR
extension method which is chained on the AddSignalR
method:
var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults();
builder.Services.AddProblemDetails();
builder.Services.AddSignalR()
.AddNamedAzureSignalR("signalr");
var app = builder.Build();
app.UseExceptionHandler();
app.MapHub<ChatHub>(HubEndpoints.ChatHub);
app.MapDefaultEndpoints();
app.Run();
Calling AddNamedAzureSignalR
adds Azure SignalR with the specified name, the connection string will be read from ConnectionStrings_{name}
, the settings are loaded from Azure:SignalR:{name}
section.
App host
In the app host project, you express an AzureSignalRResource
with the AddAzureSignalR
method. The following example demonstrates how the resource is referenced by the consuming project, in this case the Hub
host project:
var builder = DistributedApplication.CreateBuilder(args);
var signalr = builder.ExecutionContext.IsPublishMode
? builder.AddAzureSignalR("signalr")
: builder.AddConnectionString("signalr");
var apiService = builder.AddProject<Projects.SignalR_ApiService>("apiservice")
.WithReference(signalr);
builder.AddProject<Projects.SignalR_Web>("webfrontend")
.WithReference(apiService);
builder.Build().Run();
In the preceding code:
- The
builder
has its execution context checked to see if it's in publish mode. - When publishing the
AddAzureSignalR
method is called to express theAzureSignalRResource
. - When not publishing, the
AddConnectionString
method is called to express anIResourceWithConnectionString
to an existing resource. - The
signalr
resource is referenced by theHub
host project, in this case known asapiService
. - The
apiService
project resource is referenced by theSignalR_Web
project.