Поделиться через


.NET Aspire поддержка для AzureAzure SignalR Service

Из этой статьи вы узнаете, как использовать .NET Aspire для выражения ресурса AzureAzure SignalR Service. Демонстрация написания приложения SignalR выходит за рамки этой статьи. Вместо этого вы изучите приложение, которое уже написано, и посмотрите, как оно связано с .NET.NET Aspire. Как и другие ресурсы Azure в модели приложений .NET Aspire, вы извлекаете выгоду из простой подготовки и развертывания с помощью Azure Developer CLI (azd). Для получения дополнительной информации см. Развертывание проекта .NET Aspire на Azure Container Apps с помощью azd (подробного руководства).

Хост концентратора

Проект размещения хаба — это место, где размещается ваш хаб SignalR, проект, который, например, вызывает AddSignalR() и MapHub.

Установка пакета NuGet

Необходимо установить 📦 MicrosoftAzure.SignalR пакет NuGet.

dotnet add package Microsoft.Azure.SignalR

Дополнительные сведения см. в статье dotnet add package или Управление зависимостями пакетов в .NET applications.

Выразить ресурс

В каком бы проекте вы ни размещали свой Hub, именно там вы будете настраивать свой ресурс AzureAzure SignalR Service. В следующем примере показано, как использовать метод расширения AddNamedAzureSignalR, который связан с методом 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();

Вызов AddNamedAzureSignalR добавляет AzureSignalR с указанным именем, строка подключения будет считываться из ConnectionStrings_{name}, параметры загружаются из раздела Azure:SignalR:{name}.

Хост приложения

В проекте узла приложения вы создаете AzureSignalRResource с помощью метода AddAzureSignalR. В следующем примере показано, как проект-потребитель ссылается на ресурс, в данном случае на хост-проект 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();

В приведенном выше коде:

  • builder проверяет контекст выполнения, чтобы узнать, находится ли он в режиме публикации.
  • При публикации метод AddAzureSignalR вызывается, чтобы выразить AzureSignalRResource.
  • Когда публикация не осуществляется, вызывается метод AddConnectionString, чтобы передать IResourceWithConnectionString существующему ресурсу.
  • Ресурс signalr упоминается главным проектом Hub, в данном случае известен как apiService.
  • Ресурс проекта apiService ссылается на проект SignalR_Web.

См. также