Compartilhar via


Tutorial: Adicionar .NET Aspire a um aplicativo de .NET existente

Se você tiver microsserviços existentes e .NET aplicativo Web, poderá adicionar .NET Aspire a ele e obter todos os recursos e benefícios incluídos. Neste artigo, você adicionará a orquestração .NET Aspire a um projeto .NET 9 simples e existente. Você aprenderá a:

  • Entenda a estrutura do aplicativo de microsserviços existente.
  • Inscreva projetos existentes no orquestrador .NET.NET Aspire.
  • Compreenda as mudanças que a inscrição provoca nos projetos.
  • Inicie o projeto .NET.NET Aspire.

Pré-requisitos

Para trabalhar com .NET.NET Aspire, você precisa do seguinte instalado localmente:

Para obter mais informações, consulte .NET.NET Aspirede instalação e ferramentas e .NET.NET Aspiredo SDK.

Introdução

Vamos começar obtendo o código para a solução:

  1. Abra um prompt de comando e altere os diretórios para onde você deseja armazenar o código.

  2. Para clonar a solução de exemplo .NET 9, use o seguinte comando git clone:

    git clone https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops.git eShopLite
    

Explorar o aplicativo de exemplo

Este artigo usa uma solução .NET 9 com três projetos:

  • Entidades de Dados: este projeto é uma biblioteca de classes de exemplo. Ele define a classe Product usada no Aplicativo Web e na API Web.
  • Produtos: este exemplo de API Web retorna uma lista de produtos no catálogo e suas propriedades.
  • Store: este exemplo Blazor Aplicativo Web exibe o catálogo de produtos aos visitantes do site.

Arquitetura de aplicativo de exemplo

Para entender melhor a estrutura do aplicativo de exemplo, considere o seguinte diagrama, que ilustra sua arquitetura simples de três camadas:

Diagrama simples de arquitetura de três camadas mostrando um banco de dados do produto, a API do produto e um aplicativo Web da loja.

Esse design em camadas garante uma separação clara de preocupações, facilitando a manutenção e a escala do aplicativo.

Executar o aplicativo de exemplo

Abra e inicie a depuração do projeto para examinar seu comportamento padrão:

  1. Inicie Visual Studio e selecione Arquivo>Abrir>Projeto/Solução.

  2. Navegue até a pasta de nível superior da solução clonada, selecione eShopLite.slne selecione Abrir.

  3. No Gerenciador de Soluções , clique com o botão direito do mouse na solução eShopLite e selecione Configurar Projétos de Início.

  4. Selecione Vários projetos de inicialização.

  5. Na coluna Ação, selecione Iniciar para os projetos Produtos e Store.

  6. Selecione OK.

  7. Para começar a depurar a solução, pressione F5 ou selecione Iniciar.

  8. Duas páginas abertas no navegador:

    • Uma página exibe produtos no formato JSON a partir de uma chamada à API Web de Produtos.
    • Uma página exibe a página inicial do site. No menu à esquerda, selecione Produtos para ver o catálogo obtido da API Web.
  9. Para interromper a depuração, feche o navegador.

  1. Inicie Visual Studio Code e abra a pasta clonada. No terminal em que você clonou o repositório, execute o seguinte comando:

    code .
    
  2. Selecione o item de menu Executar e Depurar ou pressione Ctrl+Shift+D.

  3. Selecione o link criar um arquivo launch.json.

    Visual Studio Code:

  4. Copie e cole o seguinte JSON neste arquivo e Salvar:

    {
        "version": "0.2.0",
        "compounds": [
            {
                "name": "Run all",
                "configurations": [
                    "Run products",
                    "Run store",
                ]
            }
        ],
        "configurations": [
            {
                "name": "Run products",
                "type": "dotnet",
                "request": "launch",
                "projectPath": "${workspaceFolder}/Products/Products.csproj"
            },
            {
                "name": "Run store",
                "type": "dotnet",
                "request": "launch",
                "projectPath": "${workspaceFolder}/Store/Store.csproj"
            }
        ]
    }
    
  5. Para começar a depurar a solução, pressione F5 ou selecione Iniciar.

  6. Duas páginas abertas no navegador:

    • Uma página exibe produtos no formato JSON a partir de uma chamada à API Web de Produtos.
    • Uma página exibe a página inicial do site. No menu à esquerda, selecione Produtos para ver o catálogo obtido da API Web.
  7. Para interromper a depuração, feche o navegador e selecione o botão Parar duas vezes (uma vez para cada instância de depuração em execução).

  1. Abra uma janela do terminal e altere os diretórios para o repositório recém-clonado.

  2. Para iniciar o aplicativo Products, execute o seguinte comando:

    dotnet run --project ./Products/Products.csproj
    
  3. Uma página do navegador é aberta, exibindo o JSON dos produtos.

  4. Em uma janela de terminal separada, altere novamente os diretórios para o repositório clonado.

  5. Inicie o aplicativo da Store executando o seguinte comando:

    dotnet run --project ./Store/Store.csproj
    
  6. O navegador abre uma página que exibe a home page do site. No menu à esquerda, selecione Produtos para ver o catálogo obtido da API Web.

  7. Para interromper a depuração, feche o navegador e pressione Ctrl+C em ambos os terminais.

Não importa qual ferramenta você use, iniciar vários projetos manualmente ou configurar conexões entre eles é entediante. Além disso, o projeto da Store requer uma configuração explícita de endpoint para a API de Produtos, que é complicada e propensa a erros. É aqui que .NET.NET Aspire simplifica e otimiza o processo!

Verifique se .NET.NET Aspire os modelos estão instalados

Se você já trabalhou com .NET Aspire no seu computador atual antes, provavelmente já tem os modelos de projeto .NET necessários instalados. Você pode verificar usando o seguinte comando:

dotnet new list aspire

Se os .NET.NET Aspire modelos estiverem instalados, a saída será semelhante a:

These templates matched your input: '.NET Aspire'

Template Name       Short Name              Language  Tags
------------------  ----------------------  --------  -------------------------------------------------------------------------------
.NET Aspire App...  aspire-apphost          [C#]      Common/.NET Aspire/Cloud
.NET Aspire Emp...  aspire                  [C#]      Common/.NET Aspire/Cloud/Web/Web API/API/Service
.NET Aspire Ser...  aspire-servicedefaults  [C#]      Common/.NET Aspire/Cloud/Web/Web API/API/Service
.NET Aspire Sta...  aspire-starter          [C#]      Common/.NET Aspire/Blazor/Web/Web API/API/Service/Cloud/Test/MSTest/NUnit/xUnit
.NET Aspire Tes...  aspire-mstest           [C#]      Common/.NET Aspire/Cloud/Web/Web API/API/Service/Test/MSTest
.NET Aspire Tes...  aspire-nunit            [C#]      Common/.NET Aspire/Cloud/Web/Web API/API/Service/Test/NUnit
.NET Aspire Tes...  aspire-xunit            [C#]      Common/.NET Aspire/Cloud/Web/Web API/API/Service/Test/xUnit

Neste tutorial, você adicionará um projeto de Host de Aplicativo e um projeto de Padrões de Serviço.

Se o comando anterior não encontrar nenhum modelo, você deverá instalá-los. Execute este comando:

dotnet new install Aspire.ProjectTemplates

Para obter mais informações sobre os .NET.NET Aspire modelos, consulte .NET.NET Aspire modelos

Adicionar .NET.NET Aspire ao aplicativo Web da Store

Agora, vamos inscrever o projeto Store, que implementa a interface do usuário da Web, no sistema de orquestração .NET.NET Aspire.

  1. No Visual Studio, no Gerenciador de Soluções, clique com o botão direito do mouse no projeto Store, selecione Adicionare selecione .NET.NET Aspire Suporte do Orchestrator.

  2. Na caixa de diálogo Adicionar .NETSuporte.NET Aspire Orchestrator, selecione OK.

    Captura de tela do diálogo Adicionar Suporte ao Orquestrador .NET.NET Aspire.

Agora você deve ter dois novos projetos, ambos adicionados à solução:

  • eShopLite.AppHost: um projeto de orquestrador projetado para conectar e configurar os diferentes projetos e serviços do seu aplicativo. O orquestrador é definido como o projeto de inicialização, e depende do projeto eShopLite.Store.
  • eShopLite.ServiceDefaults: um projeto compartilhado .NET.NET Aspire para gerenciar configurações reutilizadas em projetos na sua solução, relacionadas à resiliência , à descoberta de serviço e à telemetria .

No projeto eShopLite.AppHost, abra o arquivo Program.cs. Observe essa linha de código, que registra o projeto da Store na orquestração :

builder.AddProject<Projects.Store>("store");

Para obter mais informações, consulte AddProject.

Para adicionar o projeto Products a .NET.NET Aspire:

  1. No Visual Studio, no Gerenciador de Soluções, clique com o botão direito do mouse no projeto Produtos, selecione Adicionar, e então selecione .NET.NET Aspire Suporte para Orchestrator.

  2. Na caixa de diálogo que indica que o projeto do Orchestrator .NET.NET Aspire já existe, selecione OK.

    .NET

No projeto eShopLite.AppHost, abra o arquivo Program.cs. Observe essa linha de código, que registra o projeto Products na orquestração .NET.NET Aspire:

builder.AddProject<Projects.Products>("products");

Observe também que o projeto eShopLite.AppHost agora depende dos projetos Store e Products.

Criar um projeto de host de aplicativo

Para orquestrar os projetos existentes, você precisa criar um novo projeto de host de aplicativo. Para criar um novo projeto de aplicativo host a partir dos modelos .NET Aspire disponíveis, use o seguinte comando .NET CLI:

dotnet new aspire-apphost -o eShopLite.AppHost

Adicione o projeto host do aplicativo à solução existente.

dotnet sln ./eShopLite.sln add ./eShopLite.AppHost/eShopLite.AppHost.csproj

Adicione o projeto Store como uma referência ao projeto de host de aplicativo usando o seguinte comando CLI .NET:

dotnet add ./eShopLite.AppHost/eShopLite.AppHost.csproj reference ./Store/Store.csproj

Para obter mais informações sobre os modelos disponíveis, consulte .NET.NET Aspire modelos.

Criar um projeto de configurações padrão de serviço

Depois que o projeto de host do aplicativo for criado, você precisará criar um novo serviço padrão projeto. Para criar um novo projeto de padrões de serviço a partir dos modelos de .NET Aspire disponíveis, use o seguinte comando .NET CLI:

dotnet new aspire-servicedefaults -o eShopLite.ServiceDefaults

Para adicionar o projeto à solução, use o seguinte comando .NET CLI:

dotnet sln ./eShopLite.sln add ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj

Atualize o projeto host do app para adicionar uma referência ao projeto Products.

dotnet add ./eShopLite.AppHost/eShopLite.AppHost.csproj reference ./Products/Products.csproj

Os projetos Store e Products precisam referenciar o projeto de padrões de serviço para que possam incluir facilmente a descoberta de serviço . Para adicionar uma referência ao projeto de padrões de serviço no projeto Store, use o seguinte comando .NET CLI:

dotnet add ./Store/Store.csproj reference ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj

O mesmo comando com caminhos ligeiramente diferentes deve ser usado para adicionar uma referência ao projeto padrões de serviço no projeto Produtos:

dotnet add ./Products/Products.csproj reference ./eShopLite.ServiceDefaults/eShopLite.ServiceDefaults.csproj

Nos projetos Store e Produtos, atualize seus arquivos de Program.cs, adicionando seguinte linha imediatamente após a linha de var builder = WebApplication.CreateBuilder(args);:

builder.AddServiceDefaults();

Atualizar o projeto de host do aplicativo

Abra o arquivo Program.cs do host de aplicativo no projeto, e substitua seu conteúdo pelo seguinte código C#:

var builder = DistributedApplication.CreateBuilder(args);

builder.AddProject<Projects.Store>("store");

builder.AddProject<Projects.Products>("products");

builder.Build().Run();

O código anterior:

  • Cria uma nova instância de DistributedApplicationBuilder.
  • Adiciona o projeto Store ao orquestrador.
  • Adiciona o projeto Produtos ao orquestrador.
  • Compila e executa o orquestrador.

Descoberta de Serviço

Neste ponto, ambos os projetos estão sob a orquestração .NET.NET Aspire, mas o projeto Store precisa depender do endereço de backend do projeto Produtos por meio do serviço de descoberta de .NET.NET Aspire. Para habilitar a descoberta de serviço, abra o arquivo Program.cs no projeto eShopLite.AppHost e atualize o código para que o builder adicione uma referência ao projeto Products:

var builder = DistributedApplication.CreateBuilder(args);

var products = builder.AddProject<Projects.Products>("products");

builder.AddProject<Projects.Store>("store")
       .WithExternalHttpEndpoints()
       .WithReference(products)
       .WaitFor(products);

builder.Build().Run();

O código anterior expressa que o projeto Store depende do projeto Products. Para obter mais informações, consulte .NET.NET Aspire host do aplicativo: recursos de referência. Essa referência é usada para descobrir o endereço do projeto Products em tempo de execução. Além disso, o projeto Store está configurado para usar pontos de extremidade HTTP externos. Se você optar por implantar esse aplicativo mais tarde, precisará da chamada para WithExternalHttpEndpoints para garantir que ele seja público para o mundo exterior. Por fim, a API garante que o WaitFor aplicativo da Loja aguarde que o aplicativo Produtos esteja pronto para atender às solicitações.

Em seguida, atualize o appsettings.json no projeto da Store com o seguinte JSON:

{
  "DetailedErrors": true,
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ProductEndpoint": "http://products",
  "ProductEndpointHttps": "https://products"
}

Os endereços dos endpoints agora usam o nome "produtos" que foi adicionado ao orquestrador no host do aplicativo. Esses nomes são usados para descobrir o endereço do projeto Produtos.

Explorar o aplicativo inscrito

Vamos iniciar a solução e examinar o novo comportamento que .NET.NET Aspire fornece.

Nota

Observe que o projeto eShopLite.AppHost é o novo projeto de inicialização.

  1. Em Visual Studio, para iniciar a depuração, pressione F5Visual Studio para compilar os projetos.
  2. Se a caixa de diálogo Iniciar Docker Área de Trabalho for exibida, selecione Sim. Visual Studio inicia o mecanismo de Docker e cria os contêineres necessários. Quando a implantação for concluída, o painel .NET.NET Aspire será exibido.
  3. No painel, selecione o endpoint do projeto produtos. Uma nova aba do navegador é aberta e exibe o catálogo de produtos no formato JSON.
  4. No painel, selecione o endpoint do projeto store. Uma nova guia do navegador é aberta e exibe a página inicial do aplicativo web.
  5. No menu à esquerda, selecione Produtos. O catálogo de produtos é exibido.
  6. Para interromper a depuração, feche o navegador.

Exclua o arquivo de launch.json criado anteriormente, ele não serve mais a uma finalidade. Em vez disso, inicie o projeto do host do app, que orquestra os outros projetos.

  1. Inicie o projeto de host do aplicativo clicando com o botão direito do mouse no projeto eShopLite.AppHost no Gerenciador de Soluções e selecionando Depurar>Iniciar Nova Instância:

    Visual Studio Code: Gerenciador de Soluções, selecione Depurar > Iniciar Nova Instância.

    Nota

    Se Docker a Área de Trabalho (ou Podman) não estiver em execução, você sofrerá um erro. Inicie o runtime do contêiner e tente novamente.

  1. Inicie o projeto host do aplicativo executando o seguinte comando:

    dotnet run --project ./eShopLite.AppHost/eShopLite.AppHost.csproj
    

    Nota

    Se Docker a Área de Trabalho (ou Podman) não estiver em execução, você sofrerá um erro. Inicie o runtime do contêiner e tente novamente.

  1. No painel, selecione o endpoint do projeto produtos. Uma nova aba do navegador é aberta e exibe o catálogo de produtos no formato JSON.
  2. No painel, selecione o endpoint do projeto store. Uma nova guia do navegador é aberta e exibe a página inicial do aplicativo web.
  3. No menu à esquerda, selecione Produtos. O catálogo de produtos é exibido.
  4. Para interromper a depuração, feche o navegador.

Parabéns, você adicionou .NET.NET Aspire orquestração ao seu aplicativo Web pré-existente. Agora você pode adicionar integrações .NET Aspire e usar as ferramentas de .NET Aspire para simplificar o desenvolvimento de aplicativos Web nativos de nuvem.