Udostępnij za pośrednictwem


Samouczek: Połącz aplikację ASP.NET Core z integracjami przechowywania .NET Aspire

Aplikacje cloud-native często wymagają skalowalnych rozwiązań magazynowych, które zapewniają możliwości, takie jak magazyn obiektów blob, kolejki lub semistrukturalne bazy danych NoSQL. .NET Aspire integracje upraszczają połączenia z różnymi usługami przechowywania, takimi jak Azure Blob Storage. W tym samouczku utworzysz aplikację ASP.NET Core, która używa integracji .NET Aspire do łączenia się z usługą kolejki Azure Blob Storage i Azure w celu przesyłania zgłoszeń pomocy technicznej. Aplikacja wysyła bilety do kolejki na potrzeby przetwarzania i przekazywania załącznika do magazynu. Dowiesz się, jak wykonywać następujące działania:

  • Tworzenie podstawowej aplikacji .NET skonfigurowanej do korzystania z integracji .NET Aspire
  • Dodaj integracje .NET.NET Aspire, aby połączyć się z wieloma usługami przechowywania
  • Konfigurowanie i używanie funkcji składnika .NET.NET Aspire do wysyłania i odbierania danych

Warunki wstępne

Aby pracować z .NET.NET Aspire, musisz mieć zainstalowane lokalnie następujące elementy:

Aby uzyskać więcej informacji, zobacz .NET.NET Aspire setup and toolingi .NET.NET Aspire SDK.

Eksplorowanie ukończonej przykładowej aplikacji

Ukończona wersja przykładowej aplikacji z tego samouczka jest dostępna w GitHub. Projekt jest również ustrukturyzowany jako szablon Azure Developer CLI, co oznacza, że można użyć polecenia azd up do zautomatyzowania dostarczania zasobów Azure, jeśli masz narzędzie zainstalowane.

git clone https://github.com/Azure-Samples/dotnet-aspire-connect-storage.git

Konfigurowanie zasobów usługi Azure Storage

Aby skorzystać z tego artykułu, będziesz potrzebować dostępu jako współautor danych do konta Azure Storage z kontenerem obiektów blob i kolejką przechowywania. Upewnij się, że masz dostępne następujące zasoby i konfiguracje:

W ramach tego artykułu należy utworzyć kontener obiektów blob i kolejkę magazynową w lokalnym środowisku deweloperskim przy użyciu emulatora. W tym celu użyj Azurite. Azurite to bezpłatny, wieloplatformowy interfejs API Azure Storage zgodny z server (emulator), który działa w kontenerze Docker.

Aby użyć emulatora, należy zainstalować aplikację Azurite.

  1. Konto usługi Azure Storage — Utwórz konto magazynowe.
  2. Kontener o nazwie fileuploads - Utwórz kontener.
  3. Kolejka magazynowa o nazwie bilety - . Utwórz kolejkę magazynową.

Uruchom następujące polecenia w interfejsie wiersza polecenia Azure lub programie CloudShell, aby skonfigurować wymagane zasoby usługi Azure Storage:

az group create --name aspirestorage --location eastus2
az storage account create -n aspirestorage -g aspirestorage -l eastus2
az storage container create -n fileuploads --account-name aspirestorage
az storage queue create -n tickets --account-name aspirestorage

Musisz również przypisać następujące role do konta użytkownika, za pomocą którego zalogowano się do Visual Studio:

Azure Developer CLI umożliwia dostarczanie i wdrażanie zasobów Azure przy użyciu systemu szablonów. Ten samouczek zapewnia kompletny szablon, który dostarcza wymagane zasoby Azure i zawiera ukończony przykładowy kod aplikacji. Uruchom następujące polecenia, aby zainicjować i uruchomić szablon:

  1. Uruchom azd auth login, aby zalogować się do Azure:

    azd auth login
    
  2. Uruchom azd init, aby sklonować i zainicjować przykładowy szablon:

    azd init --template dotnet-aspire-connect-storage
    
  3. Uruchom azd up, aby przygotować zasoby Azure:

    azd up
    
  4. Po wyświetleniu monitu wybierz subskrypcję i region Azure dla aprowizowania zasobów. Szablon jest uruchamiany i wykonuje następujące zadania:

    • Tworzy konto magazynowe Azure z włączoną usługą Blob i usługą kolejek
    • Tworzy kontener magazynu obiektów blob o nazwie fileUploads
    • Tworzy kolejkę o nazwie tickets
    • Przypisuje następujące role do konta użytkownika, na które uruchomiono szablon.
      • Współautor danych obiektu blob usługi Storage
      • Współautor danych kolejki usługi Storage

Po pomyślnym zakończeniu operacji dostępne są dwie opcje:

  • Opcja 1. Uruchom przykładową aplikację .NET w katalogu szablonu src, aby poeksperymentować z ukończoną aplikacją.
  • Opcja 2: Zbuduj przykładową aplikację krok po kroku, korzystając z sekcji poniżej i połącz ją z zasobami Azure przygotowanymi przez azd.

Tworzenie przykładowego rozwiązania

Utwórz projekt .NET Aspire przy użyciu Visual Studio lub interfejsu wiersza polecenia .NET.

  1. W górnej części Visual Studioprzejdź do File>New>Project.
  2. W oknie dialogowym wyszukaj Aspire i wybierz pozycję .NET.NET Aspire Starter Application. Wybierz pozycję Dalej.
  3. Na ekranie Konfigurowanie nowego projektu:
    • Wprowadź nazwę rozwiązania AspireStorage i wybierz Dalej.
  4. Na ekranie Dodatkowe informacje:
    • Usuń zaznaczenie Użyj Redis do buforowania (nie jest to wymagane w tym samouczku).
    • Wybierz pozycję Utwórz.

Visual Studio tworzy nowe rozwiązanie ASP.NET Core zaprojektowane do używania .NET Aspire.

Rozwiązanie składa się z następujących projektów:

  • AspireStorage.ApiService — projekt interfejsu API z domyślnymi konfiguracjami usługi .NET.NET Aspire.
  • AspireStorage.AppHost — projekt orkiestratora zaprojektowany pod kątem łączenia i konfigurowania różnych projektów i usług aplikacji. Orkiestrator powinien być ustawiony jako projekt startowy.
  • AspireStorage.ServiceDefaults — udostępniona biblioteka klas do przechowywania kodu, który można użyć ponownie w projektach w rozwiązaniu.
  • AspireStorage.Web — projekt BlazorServer, który służy jako fronton aplikacji.

Dodawanie projektu Worker Service

Następnie dodaj projekt Worker Service do rozwiązania w celu pobierania i przetwarzania komunikatów podczas dodawania ich do kolejki usługi Azure Storage.

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy najwyższego poziomu węzeł rozwiązania AspireStorage i wybierz pozycję Dodaj>Nowy projekt.
  2. Wyszukaj i wybierz szablon Worker Service, a następnie wybierz Dalej.
  3. W polu Nazwa projektu wprowadź AspireStorage.WorkerService i wybierz Dalej.
  4. Na ekranie Dodatkowe informacje:
    • Upewnij się, że wybrano .NET 9.0.
    • Upewnij się, że zaznaczono opcję zapisania się do .NET.NET Aspire orkiestracji i wybierz Utwórz.

Visual Studio dodaje projekt do rozwiązania i aktualizuje plik Program.cs projektu AspireStorage.AppHost z nowym wierszem kodu:

builder.AddProject<Projects.AspireStorage_WorkerService>(
    "aspirestorage-workerservice");

Visual Studio narzędzia dodały ten wiersz kodu w celu zarejestrowania nowego projektu za pomocą obiektu IDistributedApplicationBuilder, który umożliwia funkcje orkiestracji. Aby uzyskać więcej informacji, zobacz omówienie orkiestracji .NET.NET Aspire.

Ukończona struktura rozwiązania powinna przypominać następujące elementy:

Zrzut ekranu przedstawiający strukturę przykładowego rozwiązania przechowywania .NET.NET Aspire.

Dodawanie integracji .NET Aspire do aplikacji Blazor

Dodaj pakiety integracji .NET AspireAzure Blob Storage i .NET AspireAzure Queue Storage do projektu AspireStorage.Web:

dotnet add package Aspire.Azure.Storage.Blobs
dotnet add package Aspire.Azure.Storage.Queues

Projekt AspireStorage.Web jest teraz skonfigurowany do korzystania z integracji .NET.NET Aspire. Oto zaktualizowany plik AspireStorage.Web.csproj:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\AspireStorage.ServiceDefaults\AspireStorage.ServiceDefaults.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Aspire.Azure.Storage.Blobs" Version="9.0.0" />
    <PackageReference Include="Aspire.Azure.Storage.Queues" Version="9.0.0" />
  </ItemGroup>

</Project>

Następnym krokiem jest dodanie integracji do aplikacji.

W pliku Program.cs projektu AspireStorage.Web dodaj wywołania metod rozszerzenia AddAzureBlobClient i AddAzureQueueClient po utworzeniu builder, ale przed wywołaniem AddServiceDefaults. Aby uzyskać więcej informacji, zobacz ustawienia domyślne usługi .NET.NET Aspire. Podaj nazwę ciągu połączenia jako parametr.

using AspireStorage.Web;
using AspireStorage.Web.Components;

using Azure.Storage.Blobs;
using Azure.Storage.Queues;

var builder = WebApplication.CreateBuilder(args);

builder.AddAzureBlobClient("BlobConnection");
builder.AddAzureQueueClient("QueueConnection");

// Add service defaults & Aspire components.
builder.AddServiceDefaults();

// Add services to the container.
builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();

builder.Services.AddOutputCache();

builder.Services.AddHttpClient<WeatherApiClient>(client =>
    {
        // This URL uses "https+http://" to indicate HTTPS is preferred over HTTP.
        // Learn more about service discovery scheme resolution at https://aka.ms/dotnet/sdschemes.
        client.BaseAddress = new("https+http://apiservice");
    });

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error", createScopeForErrors: true);
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}
else
{
    // In development, create the blob container and queue if they don't exist.
    var blobService = app.Services.GetRequiredService<BlobServiceClient>();
    var docsContainer = blobService.GetBlobContainerClient("fileuploads");

    await docsContainer.CreateIfNotExistsAsync();

    var queueService = app.Services.GetRequiredService<QueueServiceClient>();
    var queueClient = queueService.GetQueueClient("tickets");

    await queueClient.CreateIfNotExistsAsync();
}

app.UseHttpsRedirection();

app.UseStaticFiles();
app.UseAntiforgery();

app.UseOutputCache();

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();

app.MapDefaultEndpoints();

app.Run();
using AspireStorage.Web;
using AspireStorage.Web.Components;

using Azure.Storage.Blobs;
using Azure.Storage.Queues;

var builder = WebApplication.CreateBuilder(args);

builder.AddAzureBlobClient("BlobConnection");
builder.AddAzureQueueClient("QueueConnection");

// Add service defaults & Aspire components.
builder.AddServiceDefaults();

// Add services to the container.
builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();

builder.Services.AddOutputCache();

builder.Services.AddHttpClient<WeatherApiClient>(client =>
    {
        // This URL uses "https+http://" to indicate HTTPS is preferred over HTTP.
        // Learn more about service discovery scheme resolution at https://aka.ms/dotnet/sdschemes.
        client.BaseAddress = new("https+http://apiservice");
    });

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error", createScopeForErrors: true);
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseStaticFiles();
app.UseAntiforgery();

app.UseOutputCache();

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();

app.MapDefaultEndpoints();

app.Run();

Dzięki dodatkowym instrukcjom using te metody wykonują następujące zadania:

Po uruchomieniu projektu AspireStorage.Web zostanie utworzony kontener fileuploads w usłudze Azurite Blob Storage oraz kolejka tickets w usłudze Azurite Queue Storage. Jest to warunkowe, gdy aplikacja jest uruchomiona w środowisku programistycznym. Gdy aplikacja jest uruchomiona w środowisku produkcyjnym, zakłada się, że kontener i kolejka zostały już utworzone.

Dodawanie integracji .NET Aspire do Worker Service

Usługa procesu roboczego obsługuje ściąganie komunikatów z kolejki usługi Azure Storage na potrzeby przetwarzania. Dodaj pakiet integracyjny usługi .NET AspireAzure Queue Storage do aplikacji AspireStorage.WorkerService:

dotnet add package Aspire.Azure.Storage.Queues

W pliku Program.cs projektu AspireStorage.WorkerService dodaj wywołanie metody rozszerzenia AddAzureQueueClient po utworzeniu builder, ale przed wywołaniem AddServiceDefaults:

using AspireStorage.WorkerService;

var builder = Host.CreateApplicationBuilder(args);

builder.AddAzureQueueClient("QueueConnection");

builder.AddServiceDefaults();
builder.Services.AddHostedService<WorkerService>();

var host = builder.Build();
host.Run();

Ta metoda obsługuje następujące zadania:

  • Zarejestruj QueueServiceClient w kontenerze DI w celu połączenia z Azure Storage Queues.
  • Automatycznie włącz odpowiednie kontrole kondycji, rejestrowanie i dane telemetryczne dla odpowiednich usług.

Tworzenie formularza

Aplikacja wymaga formularza, który pozwala użytkownikowi przesłać informacje o zgłoszeniu wsparcia technicznego i dodać załącznik. Aplikacja przesyła dołączony plik z właściwości Document (IFormFile) do Azure Blob Storage za pomocą wstrzykniętego BlobServiceClient. QueueServiceClient wysyła komunikat składający się z Title i Description do kolejki magazynowej Azure.

Użyj następującego znacznika Razor, aby utworzyć podstawowy formularz, zastępując zawartość pliku Home.razor w katalogu AspireStorage.Web/Components/Pages:

@page "/"

@using System.ComponentModel.DataAnnotations
@using Azure.Storage.Blobs
@using Azure.Storage.Queues

@inject BlobServiceClient BlobClient
@inject QueueServiceClient QueueServiceClient

<PageTitle>Home</PageTitle>

<div class="text-center">
    <h1 class="display-4">Request Support</h1>
</div>

<EditForm Model="@Ticket" FormName="Tickets" method="post"
          OnValidSubmit="@HandleValidSubmit" enctype="multipart/form-data">
    <DataAnnotationsValidator />
    <ValidationSummary />

    <div class="mb-4">
        <label>Issue Title</label>
        <InputText class="form-control" @bind-Value="@Ticket.Title" />
        <ValidationMessage For="() => Ticket.Title" />
    </div>
    <div class="mb-4">
        <label>Issue Description</label>
        <InputText class="form-control" @bind-Value="@Ticket.Description" />
        <ValidationMessage For="() => Ticket.Description" />
    </div>
    <div class="mb-4">
        <label>Attachment</label>
        <InputFile class="form-control" name="Ticket.Document" />
        <ValidationMessage For="() => Ticket.Document" />
    </div>
    <button class="btn btn-primary" type="submit">Submit</button>
    <button class="btn btn-danger mx-2" type="reset" @onclick=@ClearForm>Clear</button>
</EditForm>

@code {
    [SupplyParameterFromForm(FormName = "Tickets")]
    private SupportTicket Ticket { get; set; } = new();

    private async Task HandleValidSubmit()
    {
        var docsContainer = BlobClient.GetBlobContainerClient("fileuploads");

        // Upload file to blob storage
        await docsContainer.UploadBlobAsync(
            Ticket.Document.FileName,
            Ticket.Document.OpenReadStream());

        // Send message to queue
        var queueClient = QueueServiceClient.GetQueueClient("tickets");

        await queueClient.SendMessageAsync(
             $"{Ticket.Title} - {Ticket.Description}");

        ClearForm();
    }

    private void ClearForm() => Ticket = new();

    private class SupportTicket()
    {
        [Required] public string Title { get; set; } = default!;
        [Required] public string Description { get; set; } = default!;
        [Required] public IFormFile Document { get; set; } = default!;
    }
}

Aby uzyskać więcej informacji na temat tworzenia formularzy w Blazor, zobacz omówienie formularzy ASP.NET CoreBlazor.

Aktualizowanie hosta AppHost

Projekt AspireStorage.AppHost jest koordynatorem dla twojej aplikacji. Odpowiada za łączenie i konfigurowanie różnych projektów i usług aplikacji. Orkiestrator powinien być ustawiony jako projekt startowy.

Aby dodać wsparcie hostowania Azure Storage do IDistributedApplicationBuilder, zainstaluj pakiet NuGet 📦Aspire.Hosting.Azure.Storage..

dotnet add package Aspire.Hosting.Azure.Storage

Zastąp zawartość pliku Program.cs w projekcie AspireStorage.AppHost następującym kodem:

using Microsoft.Extensions.Hosting;

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("Storage");

if (builder.Environment.IsDevelopment())
{
    storage.RunAsEmulator();
}

var blobs = storage.AddBlobs("BlobConnection");
var queues = storage.AddQueues("QueueConnection");

var apiService = builder.AddProject<Projects.AspireStorage_ApiService>("apiservice");

builder.AddProject<Projects.AspireStorage_Web>("webfrontend")
    .WithExternalHttpEndpoints()
    .WithReference(apiService)
    .WithReference(blobs)
    .WithReference(queues); 

builder.AddProject<Projects.AspireStorage_WorkerService>("aspirestorage-workerservice")
    .WithReference(queues);

builder.Build().Run();

Powyższy kod dodaje Azure magazynu, obiektów blob i kolejek, a w trybie programowania używa emulatora. Każdy projekt definiuje odwołania do tych zasobów, od których zależą.

using Microsoft.Extensions.Hosting;

var builder = DistributedApplication.CreateBuilder(args);

var storage = builder.AddAzureStorage("Storage");

var blobs = storage.AddBlobs("BlobConnection");
var queues = storage.AddQueues("QueueConnection");

var apiService = builder.AddProject<Projects.AspireStorage_ApiService>("apiservice");

builder.AddProject<Projects.AspireStorage_Web>("webfrontend")
    .WithExternalHttpEndpoints()
    .WithReference(apiService)
    .WithReference(blobs)
    .WithReference(queues); 

builder.AddProject<Projects.AspireStorage_WorkerService>("aspirestorage-workerservice")
    .WithReference(queues);

builder.Build().Run();

Powyższy kod dodaje zasoby przechowywania Azure, obiekty blob i kolejki oraz definiuje odwołania do tych zasobów w każdym projekcie, który na nich polega.

Przetwarzaj pozycje w kolejce

Po umieszczeniu nowego komunikatu w kolejce tickets, usługa robocza powinna pobrać, przetworzyć i usunąć ten komunikat. Zaktualizuj klasę Worker.cs, zastępując zawartość następującym kodem:

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

namespace AspireStorage.WorkerService;

public sealed class WorkerService(
    QueueServiceClient client,
    ILogger<WorkerService> logger) : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        var queueClient = client.GetQueueClient("tickets");
        await queueClient.CreateIfNotExistsAsync(cancellationToken: stoppingToken);

        while (!stoppingToken.IsCancellationRequested)
        {
            QueueMessage[] messages =
                await queueClient.ReceiveMessagesAsync(
                    maxMessages: 25, cancellationToken: stoppingToken);

            foreach (var message in messages)
            {
                logger.LogInformation(
                    "Message from queue: {Message}", message.MessageText);

                await queueClient.DeleteMessageAsync(
                    message.MessageId,
                    message.PopReceipt,
                    cancellationToken: stoppingToken);
            }

            // TODO: Determine an appropriate time to wait 
            // before checking for more messages.
            await Task.Delay(TimeSpan.FromSeconds(15), stoppingToken);
        }
    }
}

Zanim usługa robocza będzie mogła przetwarzać komunikaty, musi mieć możliwość nawiązania połączenia z kolejką Azure Storage. W usłudze Azurite należy upewnić się, że kolejka jest dostępna przed rozpoczęciem przetwarzania kolejki wiadomości przez usługę procesu roboczego.

using Azure.Storage.Queues;
using Azure.Storage.Queues.Models;

namespace AspireStorage.WorkerService;

public sealed class WorkerService(
    QueueServiceClient client,
    ILogger<WorkerService> logger) : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        var queueClient = client.GetQueueClient("tickets");
        while (!stoppingToken.IsCancellationRequested)
        {
            QueueMessage[] messages =
                await queueClient.ReceiveMessagesAsync(
                    maxMessages: 25, cancellationToken: stoppingToken);

            foreach (var message in messages)
            {
                logger.LogInformation(
                    "Message from queue: {Message}", message.MessageText);

                await queueClient.DeleteMessageAsync(
                    message.MessageId,
                    message.PopReceipt,
                    cancellationToken: stoppingToken);
            }

            // TODO: Determine an appropriate time to wait 
            // before checking for more messages.
            await Task.Delay(TimeSpan.FromSeconds(15), stoppingToken);
        }
    }
}

Usługa robocza przetwarza komunikaty, łącząc się z kolejką usługi Storage Azure i ściągając komunikaty z tej kolejki.

Usługa pracownicza przetwarza komunikaty w kolejce i usuwa je po przetworzeniu.

Konfigurowanie parametrów połączenia

Projekty AspireStorage i AspireStorage.Worker muszą być skonfigurowane, aby nawiązać połączenie z utworzonym wcześniej kontem Storage Azure. Punkty końcowe dla usług obiektów blob i kolejek można określić na koncie magazynowym za pomocą pliku appsettings.json w każdym projekcie.

  1. W projekcie AspireStorage dodaj następującą konfigurację do pliku appsettings.Development.json:

      "ConnectionStrings": {
        "BlobConnection": "https://<your-storage-account-name>.blob.core.windows.net/",
        "QueueConnection": "https://<your-storage-account-name>.queue.core.windows.net/"
      }
    
  2. W projekcie AspireStorage.Worker dodaj następującą konfigurację do pliku appsettings.Development.json:

      "ConnectionStrings": {
        "QueueConnection": "https://<your-storage-account-name>.queue.core.windows.net/"
      }
    

Uruchamianie i testowanie aplikacji lokalnie

Przykładowa aplikacja jest teraz gotowa do testowania. Sprawdź, czy przesłane dane formularza są wysyłane do usługi Azure Blob Storage i Azure Queue Storage, wykonując następujące czynności:

  1. Naciśnij przycisk Uruchom w górnej części Visual Studio, aby uruchomić pulpit nawigacyjny projektu .NET Aspire w przeglądarce.

  2. Na stronie zasobów, w wierszu aspirestorage.web, kliknij link w kolumnie Endpoints, aby otworzyć interfejs użytkownika aplikacji.

    Zrzut ekranu przedstawiający stronę główną aplikacji wsparcia .NET.NET Aspire.

  3. Wprowadź przykładowe dane w polach formularza Title i Description, a następnie wybierz prosty plik do przekazania.

  4. Wybierz przycisk Prześlij, a formularz przesyła bilet pomocy technicznej do przetworzenia — i czyści formularz.

  5. Na osobnej karcie przeglądarki użyj portalu Azure, aby przejść do przeglądarki magazynowej w Twoim koncie magazynowym Azure.

  6. Wybierz pozycję Containers, a następnie przejdź do kontenera Documents, aby wyświetlić przekazany plik.

  7. Możesz sprawdzić, czy komunikat w kolejce został przetworzony, przeglądając dzienniki Project pulpitu nawigacyjnego .NET.NET Aspirei wybierając aspiratorage.workerservice z listy rozwijanej.

    Zrzut ekranu przedstawiający dane z konsoli aplikacji Worker.

Streszczenie

Przykładowa aplikacja, którą stworzyłeś, demonstruje zapisywanie obiektów blob z ASP.NET CoreBlazor aplikacji webowej i przetwarzanie kolejek w .NET Worker Service. Aplikacja łączy się z usługą Azure Storage przy użyciu integracji .NET Aspire. Aplikacja wysyła zgłoszenia serwisowe do kolejki do przetworzenia i przesyła załącznik do magazynu.

Ponieważ zdecydujesz się używać platformy Azurite, nie trzeba czyścić tych zasobów po zakończeniu ich testowania, ponieważ zostały utworzone lokalnie w kontekście emulatora. Emulator umożliwił testowanie aplikacji lokalnie bez ponoszenia kosztów, ponieważ żadne zasoby Azure nie zostały aprowizowane ani utworzone.

Czyszczenie zasobów

Uruchom następujące polecenie CLI Azure, aby usunąć grupę zasobów, gdy nie potrzebujesz już zasobów utworzonych przez Azure. Usunięcie grupy zasobów powoduje również usunięcie zawartych w niej zasobów.

az group delete --name <your-resource-group-name>

Aby uzyskać więcej informacji, zobacz Oczyszczanie zasobów w Azure.