Exercício - Integrar uma aplicação Web ASP.NET Core existente
Agora vamos explorar como adicionar o .NET Aspire a um aplicativo Web ASP.NET Core existente. Ao longo do caminho, você aprenderá como adicionar a pilha do .NET Aspire a um aplicativo Web ASP.NET Core existente e, em seguida, executar o aplicativo. Você também verá como chamar microsserviços a partir do aplicativo ASP.NET Core.
Configurar o ambiente
Para adicionar o .NET Aspire a uma demonstração existente ASP.NET aplicativo Web Core, você precisa primeiro obter o aplicativo existente.
Numa janela do terminal:
Defina o diretório de trabalho atual para onde você deseja armazenar seu código.
Clone o repositório em uma nova pasta chamada ExampleApp:
git clone https://github.com/MicrosoftDocs/mslearn-aspire-starter ExampleApp
Explore o aplicativo de exemplo
Use o Visual Studio para explorar o aplicativo de demonstração.
Abra o Visual Studio e selecione Abrir um projeto ou solução.
Na caixa de diálogo Abrir Projeto/Solução, navegue até a pasta ExampleApp/eShopAdmin e selecione EShopAdmin.sln.
Selecione Abrir.
O aplicativo de demonstração é uma solução .NET 8 com três projetos:
- Entidades de Dados. Uma biblioteca de classes que define a classe Product usada no Aplicativo Web e na API Web.
- Produtos. Uma API da Web que retorna uma lista de produtos no catálogo com suas propriedades.
- Loja. Um Blazor Web App exibe esses produtos para os visitantes do site.
Para executar o aplicativo com êxito, altere os projetos que são iniciados:
No menu, selecione Project>Configure Startup Projects....
Na caixa de diálogo Páginas de propriedades da solução, selecione Vários projetos de inicialização.
Na coluna Ação, defina Produtos e Loja como Iniciar.
Selecione OK.
Execute o aplicativo pressionando F5 ou selecionando Iniciar na barra de ferramentas.
O aplicativo abre duas instâncias do seu navegador da Web padrão. Um mostra a saída JSON da API Web e o outro mostra o Blazor Web App.
No aplicativo Web, selecione Produtos no menu. Você deve ver esse erro.
Pare o aplicativo pressionando Shift+F5 ou selecione Parar depuração na barra de ferramentas.
Este aplicativo é novo para você. Você não tem certeza de como os pontos de extremidade e serviços são configurados. Vamos adicionar a orquestração do .NET Aspire e ver se ela pode ajudar a diagnosticar o problema.
Inscrever o aplicativo existente na orquestração do .NET Aspire
No Visual Studio:
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto Store e selecione Add.NET> Aspire Orchestrator Support....
Na caixa de diálogo Adicionar suporte do .NET Aspire Orchestrator, selecione OK.
Agora você pode ver os projetos AppHost e ServiceDefaults foram adicionados à solução. O projeto AppHost também é definido como o projeto de inicialização.
Execute o aplicativo pressionando F5 ou selecionando Iniciar na barra de ferramentas.
Desta vez, a solução abre uma única janela do navegador mostrando o painel do .NET Aspire .
Selecione o ponto de extremidade para o projeto de loja e, em seguida, selecione Produtos. Você deve ver o mesmo erro que antes.
Volte ao painel.
Selecione a notificação de erro vermelha ao lado de Em execução e, na coluna Detalhes , selecione Exibir.
Percorra os detalhes do erro até conseguir ver o exception.message. O aplicativo Web está lutando para se conectar a localhost:5200. A porta 5200 é a porta na qual o front-end acha que a API de produtos está sendo executada.
Pare o aplicativo pressionando Shift+F5 ou selecione Parar depuração na barra de ferramentas.
Atualize a orquestração para incluir a API de produtos
Há muitas maneiras de resolver esse problema. Você pode explorar o código, descobrir como o front-end está configurado, editar o código ou alterar os arquivos launchSettings.json ou appsettings.json .
Com o .NET Aspire, você pode alterar a orquestração para que a API de produtos responda na porta 5200.
No Visual Studio:
Para adicionar o projeto Produtos à orquestração, no Gerenciador de Soluções, clique com o botão direito do mouse no projeto Produtos e selecione Add.NET> Aspire Orchestrator Support....
Na caixa de diálogo, selecione OK.
No Gerenciador de Soluções, abra o projeto AppHost e, em seguida, abra o arquivo Program.cs .
Explore o código e veja como o projeto Products é adicionado à orquestração:
var builder = DistributedApplication.CreateBuilder(args); builder.AddProject<Projects.Store>("store"); builder.AddProject<Projects.Products>("products"); builder.Build().Run();
Em seguida, configure o .NET Aspire para adicionar um novo ponto de extremidade para a API de produtos.
Substitua a
builder.AddProject<Projects.Products>("products");
linha por este código:builder.AddProject<Projects.Products>("products") .WithHttpEndpoint(port: 5200, name: "products");
Execute o aplicativo pressionando F5 ou selecionando Iniciar na barra de ferramentas.
O projeto de produtos agora está listado no painel com dois pontos de extremidade.
Selecione o ponto de extremidade para o projeto Store e, em seguida, selecione Produtos.
Os produtos agora são exibidos no aplicativo Web.
Pare o aplicativo pressionando Shift+F5 ou selecione Parar depuração na barra de ferramentas.
Essa abordagem resolve o problema de configuração, mas não é a melhor maneira de corrigir o problema. Se você decidir usar o .NET Aspire, também deverá usar a descoberta de serviço do .NET Aspire .
Atualizar a aplicação Web para utilizar a deteção do serviço .NET Aspire
No Visual Studio:
No Gerenciador de Soluções, abra o projeto AppHost e, em seguida, abra o arquivo Program.cs .
Substitua o código no arquivo por este código:
var builder = DistributedApplication.CreateBuilder(args); var products = builder.AddProject<Projects.Products>("products"); builder.AddProject<Projects.Store>("store") .WithReference(products); builder.Build().Run();
O código acima reordena os projetos. A API de produtos agora é passada como uma referência de projeto para o aplicativo Web da Loja front-end.
No Gerenciador de Soluções, abra o projeto Store e, em seguida, abra o arquivo appsettings.json .
Exclua as linhas de configuração do ponto de extremidade:
"ProductEndpoint": "http://localhost:5200", "ProductEndpointHttps": "https://localhost:5200"
As configurações são agora:
{ "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
No Gerenciador de Soluções, no projeto Store , abra o arquivo Program.cs .
Substitua esta linha:
var url = builder.Configuration["ProductEndpoint"] ?? throw new InvalidOperationException("ProductEndpoint is not set");
com esta linha:
var url = "http://products";
Execute o aplicativo pressionando F5 ou selecionando Iniciar na barra de ferramentas.
Selecione o ponto de extremidade para o projeto Store e, em seguida, selecione Produtos.
O aplicativo ainda está funcionando conforme o esperado, mas o front-end agora está usando a descoberta do serviço .NET Aspire para obter informações sobre o ponto de extremidade da API de produtos.