Esercizio - Integrare un'app Web ASP.NET Core esistente
Si esaminerà ora come aggiungere .NET Aspire a un'app Web ASP.NET Core esistente. Nel corso della procedura si apprenderà come aggiungere lo stack .NET Aspire a un'app Web ASP.NET Core esistente e quindi eseguire l'app. Si vedrà anche come chiamare i microservizi dall'app ASP.NET Core.
Configurazione dell'ambiente
Per aggiungere .NET Aspirare a una demo esistente app Web ASP.NET Core, è prima necessario ottenere l'app esistente.
In una finestra del terminale:
Impostare la directory di lavoro corrente su dove archiviare il codice.
Clonare il repository in una nuova cartella denominata ExampleApp:
git clone https://github.com/MicrosoftDocs/mslearn-aspire-starter ExampleApp
Esplorare l'app di esempio
Usare Visual Studio per esplorare l'app demo.
Aprire Visual Studio e selezionare Apri un progetto o una soluzione.
Nella finestra di dialogo Apri progetto/soluzione passare alla cartella ExampleApp/eShopAdmin e quindi selezionare EShopAdmin.sln.
Selezionare Apri.
L'app demo è una soluzione .NET 8 con tre progetti:
- Entità dati. Libreria di classi che definisce la classe Prodotto usata nell'app Web e nell'API Web.
- Prodotti. API Web che restituisce un elenco di prodotti nel catalogo con le relative proprietà.
- Store. Un'app Web Blazor visualizza questi prodotti per i visitatori del sito Web.
Per eseguire correttamente l'app, modificare i progetti che vengono avviati:
Dal menu selezionare Progetto>Configura progetti di avvio....
Nella finestra di dialogo Pagine delle proprietà della soluzione selezionare Più progetti di avvio.
Nela colonna Azione impostare Prodotti e Store su Start.
Seleziona OK.
Eseguire l'app premendo F5o selezionando Start sulla barra degli strumenti.
L'app apre due istanze del Web browser predefinito. Uno mostra l'output JSON dell'API Web e l'altro mostra l'app Web Blazor.
Nell'app Web selezionare Prodotti dal menu. Verrà visualizzato questo errore.
Arrestare l'app premendo MAIUSC+F5oppure selezionare Arresta debug sulla barra degli strumenti.
Questa app è ancora nuova. Non si è certi della configurazione degli endpoint e dei servizi. Aggiungere l'orchestrazione .NET Aspire e verificare se può aiutare a diagnosticare il problema.
Integrare l'app esistente nell'orchestrazione .NET Aspire
In Visual Studio:
In Esplora soluzioni, fare clic con il pulsante destro del mouse su Store, selezionare Aggiungi>.NET Aspire Orchestrator Support....
Nella finestra di dialogo Aggiungi .NET Aspire Orchestrator Support, selezionare OK.
Ora è possibile vedere che i progetti AppHost e ServiceDefaults vengono aggiunti alla soluzione. Il progetto AppHost viene impostato anche come progetto di avvio.
Eseguire l'app premendo F5o selezionando Start sulla barra degli strumenti.
Questa volta, la soluzione apre una singola finestra del browser che mostra il dashboard .NET Aspira.
Selezionare l'endpoint per il progetto >Store e quindi selezionare Prodotti. Dovrebbe essere visualizzato lo stesso errore di prima.
Tornare alla dashboard.
Selezionare la notifica di errore rossa accanto a In esecuzione e quindi nella colonna Dettagli selezionare Visualizza.
Scorrere i dettagli dell'errore fino a visualizzare il file exception.message. L'app Web ha difficoltà a connettersi a localhost:5200. La porta 5200 è la porta in cui il front-end ritiene che l'API dei prodotti sia in esecuzione.
Arrestare l'app premendo MAIUSC+F5oppure selezionare Arresta debug sulla barra degli strumenti.
Aggiornare l'orchestrazione per includere l'API products
Esistono molti modi per risolvere questo problema. È possibile esplorare il codice, scoprire come è configurato il front-end, modificare il codice o modificare il file launchSettings.json o appsettings.json.
Con .NET Aspire, è possibile modificare l'orchestrazione in modo che l'API dei podotti risponda sulla porta 5200.
In Visual Studio:
Per aggiungere il progetto Prodotti all'orchestrazione, in Esplora soluzioni, fare clic con il pulsante destro del mouse sul progetto Prodotti e quindi scegliere Aggiungi>.NET Aspire Orchestrator Support....
Nella finestra di dialogo selezionare OK.
In Esplora soluzioni, aprire il progetto AppHost, quindi aprire il file Program.cs.
Esplorare il codice e vedere come viene aggiunto il progetto Prodotti all'orchestrazione:
var builder = DistributedApplication.CreateBuilder(args); builder.AddProject<Projects.Store>("store"); builder.AddProject<Projects.Products>("products"); builder.Build().Run();
Configurare quindi .NET Aspire per aggiungere un nuovo endpoint per l'API dei prodotti.
Sostituire la riga
builder.AddProject<Projects.Products>("products");
con il codice seguente:builder.AddProject<Projects.Products>("products") .WithHttpEndpoint(port: 5200, name: "products");
Eseguire l'app premendo F5o selezionando Start sulla barra degli strumenti.
Il progetto Prodotti è ora elencato nella dashboard con due endpoint.
Selezionare l'endpoint per il progetto Store e quindi selezionare Prodotti.
I prodotti sono ora visualizzati nell'app Web.
Arrestare l'app premendo MAIUSC+F5oppure selezionare Arresta debug sulla barra degli strumenti.
Questo approccio risolve il problema di configurazione, ma non è il modo migliore per risolvere il problema. Se si decide di usare .NET Aspire, è consigliabile usare anche l'individuazione del servizio .NET Aspire.
Aggiornare l'app Web per usare l'individuazione del servizio .NET Aspire
In Visual Studio:
In Esplora soluzioni, aprire il progetto AppHost, quindi aprire il file Program.cs.
Sostituire il codice nel file con il seguente:
var builder = DistributedApplication.CreateBuilder(args); var products = builder.AddProject<Projects.Products>("products"); builder.AddProject<Projects.Store>("store") .WithReference(products); builder.Build().Run();
Il codice precedente riordina i progetti. L'API dei prodotti viene ora passata come riferimento al progetto all'app Web dello Store front-end.
In Esplora soluzioni, aprire il progetto Store, quindi aprire il file appsettings.json.
Eliminare le righe di configurazione dell'endpoint:
"ProductEndpoint": "http://localhost:5200", "ProductEndpointHttps": "https://localhost:5200"
Le impostazioni sono ora:
{ "DetailedErrors": true, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
In Esplora soluzioni, nel progetto Store, aprire il file Program.cs.
Sostituire questa riga:
var url = builder.Configuration["ProductEndpoint"] ?? throw new InvalidOperationException("ProductEndpoint is not set");
con questa riga:
var url = "http://products";
Eseguire l'app premendo F5o selezionando Start sulla barra degli strumenti.
Selezionare l'endpoint per il progetto Store e quindi selezionare Prodotti.
L'app funziona ancora come previsto, ma il front-end usa ora l'individuazione del servizio .NET Aspire per ottenere informazioni sull'endpoint API dei prodotti.