.NET Aspire supporto per AzureAzure SignalR Service
Questo articolo illustra come usare .NET Aspire per esprimere una risorsa AzureAzure SignalR Service. La dimostrazione di come scrivere un'app SignalR non rientra nell'ambito di questo articolo. Si esplora invece un'app già scritta e come è collegata con .NET.NET Aspire. Analogamente ad altre risorse di Azure all'interno del modello di app .NET Aspire, è possibile sfruttare il provisioning e la distribuzione semplici con il Azure Developer CLI (azd
). Per altre informazioni, vedere Distribuire un progetto di .NET Aspire per Azure Container Apps usando azd
(guida dettagliata).
Host del hub
Il progetto host hub è la posizione in cui si ospita l'hub SignalR, il progetto che chiama AddSignalR() e MapHub, ad esempio.
Installare il pacchetto NuGet
È necessario installare il 📦 Microsoft.Azure.SignalR pacchetto NuGet.
dotnet add package Microsoft.Azure.SignalR
Per altre informazioni, vedere dotnet add package o Gestire le dipendenze dei pacchetti in .NET applicazioni.
Esprimere la risorsa
Qualsiasi progetto che stai utilizzando per ospitare il Hub è il luogo in cui collegherai la risorsa AzureAzure SignalR Service. Nell'esempio seguente viene illustrato come usare il metodo di estensione AddNamedAzureSignalR
concatenato nel metodo AddSignalR
:
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();
La chiamata AddNamedAzureSignalR
aggiunge AzureSignalR con il nome specificato, la stringa di connessione verrà letta da ConnectionStrings_{name}
, le impostazioni vengono caricate dalla sezione Azure:SignalR:{name}
.
Host dell'applicazione
Nel progetto host dell'app , un AzureSignalRResource
viene espresso utilizzando il metodo AddAzureSignalR
. Nell'esempio seguente viene illustrato come viene fatto riferimento alla risorsa dal progetto di utilizzo, in questo caso il progetto host Hub
:
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();
Nel codice precedente:
- Il contesto di esecuzione di
builder
viene controllato per verificare se è in modalità pubblicazione. - Quando si pubblica, il metodo
AddAzureSignalR
viene chiamato per rappresentare ilAzureSignalRResource
. - Quando non si pubblica, viene invocato il metodo
AddConnectionString
per esprimere unIResourceWithConnectionString
a una risorsa esistente. - La risorsa
signalr
fa riferimento al progetto hostHub
, in questo caso noto comeapiService
. - La risorsa di progetto
apiService
fa riferimento al progettoSignalR_Web
.