esemény
Intelligens alkalmazások létrehozása
márc. 17. 21 - márc. 21. 10
Csatlakozzon a meetup sorozathoz, hogy valós használati esetek alapján, skálázható AI-megoldásokat hozzon létre más fejlesztőkkel és szakértőkkel.
RegisztrációEzt a böngészőt már nem támogatjuk.
Frissítsen a Microsoft Edge-re, hogy kihasználhassa a legújabb funkciókat, a biztonsági frissítéseket és a technikai támogatást.
📢 .NET Aspire 9.0 a .NET Aspirekövetkező fő általános rendelkezésre állási (GA) kiadása; támogatja mindkét:
Megjegyzés
A .NET Aspire 9.0 .NET 8 vagy .NET 9 használatával is használható!
Ez a kiadás a közösség által leggyakrabban kért funkciókkal és fájdalompontokkal foglalkozik. A legjobb funkciók a közösségvezéreltek! Ha csatlakozni szeretne a közösséghez, látogasson el Discord oldalunkra, hogy csevehessen a csapattagokkal, és működjön együtt velünk a
GitHubprojekten.
A hivatalos .NET verzióval és .NET Aspire verziótámogatással kapcsolatos további információkért lásd:
A .NET Aspire korábbi verzióiról a .NET Aspire 9-re való frissítéshez kövesse a hivatalos Frissítés .NET.NET Aspire 9-re útmutató utasításait. Az útmutató részletes útmutatást nyújt a meglévő .NET Aspire megoldások .NET Aspire 9-re való frissítéséhez. Függetlenül attól, hogy manuálisan vagy a Frissítési Asszisztens használatával végzi el, az útmutató egyszerűsíti a folyamatot.
.NET Aspire 9 egyszerűbbé teszi a környezet konfigurálását .NET Aspire alkalmazások fejlesztésére. Már nincs szüksége „.NET” számítási feladatra. Ehelyett telepíti az új .NET.NET Aspire SDK--at a .NET.NET Aspire megoldások alkalmazás gazdaprojektjébe. További információ: .NET.NET Aspire beállítás és eszközhasználat.
.NET
.NET Aspire 9 a számítási feladaton keresztül telepített tartalmat külön NuGet-csomagokba helyezi át. Ez magában foglalja az új .NET.NET Aspire projektek és megoldások létrehozásához szükséges sablonokat. Ezek a sablonok a dotnet new install
parancshasználatával vannak telepítve. Ezek a következő parancs futtatásával telepíthetők:
dotnet new install Aspire.ProjectTemplates::9.0.0
Tipp.
Ha már telepítve van a .NET.NET Aspire számítási feladat, át kell adnia a --force
jelzőt a meglévő sablonok felülírásához. Nyugodtan távolítsa el a .NET.NET Aspire munkaterhelést.
További információ: .NET.NET Aspire sablonok.
Az .NET.NET Aspire irányítópult folyamatosan fejlődik minden kiadással.
Az irányítópult leggyakrabban kért funkciója az összehangolt, elnevezett erőforrások életciklusainak kezelése. Pontosabban az erőforrások leállításának, elindításának és újraindításának lehetősége. Ez a funkció projektekhez, tárolókhoz és végrehajthatókhoz használható. Lehetővé teszi az egyes erőforrások újraindítását a teljes alkalmazásgazda újraindítása nélkül. Projekterőforrások esetén, amikor a hibakereső csatlakoztatva van, újra van kapcsolva újraindításkor. További információ: .NET.NET Aspire irányítópult: Erőforrás leállítása vagy indítása.
A .NET Aspire irányítópult mostantól mobilbarát, rugalmasan alkalmazkodik a képernyőméretek széles köréhez, és lehetővé teszi az üzembe helyezett .NET Aspire alkalmazások helyszíni felügyeletét. Egyéb akadálymentességi fejlesztések is történtek, beleértve a beállítások megjelenítését és a tartalom túlcsordulását mobileszközökön.
Az erőforrás részleteinek megjelenítése számos fejlesztést tartalmaz:
A tulajdonságok jelölhetők bizalmasként, és automatikusan maszkolhatók az irányítópult felhasználói felületén. Ez a biztonsági funkció segít elkerülni a kulcsok vagy jelszavak véletlen felfedését az irányítópult másokkal való megosztásakor. A tárolóargumentumok például bizalmas információkat adhatnak át, ezért alapértelmezés szerint maszkoltak.
A konfigurált tárolókötetek az erőforrás részletei között szerepelnek.
.NET .NET Aspire 9 támogatja az állapot-ellenőrzéseket. Az ellenőrzésekkel kapcsolatos részletes információk mostantól megtekinthetők az erőforrás részletei panelen, amely bemutatja, hogy egy erőforrás miért lehet nem kifogástalan vagy csökkentett állapotúként megjelölve. További információ az állapot-ellenőrzésekről itt.
ANSI escape kódok a szöveg terminálokon belüli formázását végzik a színek (előtér és háttér) és a stílusok (például félkövér, aláhúzott és dőlt) szabályozásával. Korábban az irányítópult konzolnaplóinak lapja egyszerre csak egy ANSI-feloldókódot tudott megjeleníteni, amely több kód kombinálásakor meghiúsult. Például piros szöveget jeleníthet meg, de nem piros és félkövér szöveget.
Egy közösségi hozzájárulás a @mangeg részéről javította az ANSI vezérlőkódok támogatását, ezzel megszüntetve ezt a korlátozást.
A konzolnaplók egy másik fejlesztése a nem támogatott feloldókódok elrejtése. A szöveg megjelenítéséhez nem kapcsolódó kódok, például a kurzor elhelyezése vagy az operációs rendszerrel való kommunikáció nem értelmezhetők ebben a felhasználói felületen, és rejtettek.
telemetriai továbbra is a .NET.NET Aspirefontos eleme marad. A .NET.NET Aspire 9 frissítésben számos új funkciót vezettek be a telemetriai szolgáltatáshoz.
A nyomkövetések attribútumértékekkel szűrhetők. Ha például csak egy végpont nyomkövetéseit szeretné megtekinteni az alkalmazásban, a HTTP-kérelmek http.route
attribútuma szűrhető egy megadott értékre.
A telemetriai szűrés a meglévő értékek automatikus kiegészítését is támogatja. A Szűrő hozzáadása párbeszédpanel egy kombinált mezőt biztosít az irányítópult által elérhető értékek közötti választáshoz. Ez a funkció sokkal egyszerűbbé teszi a valós adatokra való szűrést, és segít elkerülni az elírásokat egy érték beírásával.
További információért lásd: .NET.NET Aspire irányítópult: Nyomkövetések szűrése.
Ha egy erőforrás több replikával rendelkezik, mostantól szűrheti a telemetriát az összes példány adatainak egyszerre való megtekintéséhez. Válassza ki a szülőerőforrást, amely a "(application)
" címkével van ellátva. További információkért lásd a .NET.NET Aspire irányítópultot: telemetria egyesítése több erőforrásból.
Az irányítópult támogatja az OpenTelemetry Protokollt (OTLP) HTTP-n és forrásközi erőforrás-megosztáson (CORS) keresztül. Ezek a funkciók lehetővé teszi OpenTelemetry küldését a böngészőalkalmazásokból a .NET Aspire irányítópultra.
Egy böngészőalapú egyoldalas alkalmazás (SPA) például konfigurálhatja a JavaScript-OpenTelemetry SDK- a böngészőben létrehozott strukturált naplók, nyomkövetések és metrikák irányítópultra küldésére. A böngészőtelemetria a kiszolgáló telemetriai adatai mellett jelenik meg.
A böngésző telemetriájának konfigurálásáról további információt A böngésző telemetriájának engedélyezése dokumentációjában talál.
Az
Ha már követte a .NET.NET Aspire, már tudja, hogy az alkalmazásgazdaprojekt az, ahol ön határozza meg az alkalmazásmodellt. Létrehozhat egy elosztott alkalmazáskészítőt, erőforrásokat vehet fel és konfigurálhat, és kifejezheti függőségeiket. Most megadhatja, hogy egy erőforrásnak várnia egy másik erőforrásra a kezdés előtt. Ez segít elkerülni a kapcsolati hibákat az indítás során, ha csak akkor indítja el az erőforrásokat, ha függőségeik "készen állnak".
var builder = DistributedApplication.CreateBuilder(args);
var rabbit = builder.AddRabbitMQ("rabbit");
builder.AddProject<Projects.WebApplication1>("api")
.WithReference(rabbit)
.WaitFor(rabbit); // Don't start "api" until "rabbit" is ready...
builder.Build().Run();
Amikor az alkalmazásgazda elindul, megvárja, amíg a rabbit
erőforrás készen áll a api
erőforrás elindítása előtt.
Két módszer áll rendelkezésre az erőforrásra való várakozáshoz:
További információ: .NET.NET Aspire alkalmazásgazda: Várakozás az erőforrásokra.
A WaitFor
API szabványos .NET állapotellenőrzési segítségével állapítja meg, hogy egy erőforrás készen áll-e. De mit jelent az, hogy "egy erőforrás készen áll"? A legjobb az, hogy a felhasználó az alapértelmezett értékeken túl konfigurálhatja a beállításokat.
Ha egy erőforrás nem tesz közzé állapotellenőrzéseket (az alkalmazásban nincs állapotellenőrzés), az alkalmazás gazdagépe megvárja, hogy az erőforrás Running állapotban legyen a függő erőforrás elindítása előtt.
A HTTP-végpontokat elérhetővé tevő erőforrások esetében egyszerűen hozzáadhat egy állapotellenőrzést, amely lekérdezi a HTTP 200-válasz adott elérési útját.
var builder = DistributedApplication.CreateBuilder(args);
var catalogApi = builder.AddContainer("catalog-api", "catalog-api")
.WithHttpEndpoint(targetPort: 8080)
.WithHttpHealthCheck("/health");
builder.AddProject<Projects.WebApplication1>("store")
.WithReference(catalogApi.GetEndpoint("http"))
.WaitFor(catalogApi);
builder.Build().Run();
Az előző példa egy állapot-ellenőrzést ad hozzá a catalog-api
erőforráshoz. Az alkalmazásgazda megvárja, amíg az állapot-ellenőrzés egészséges állapotot jelez, mielőtt elindítaná a store
erőforrást. Meghatározza, hogy az erőforrás készen áll-e, amikor a /health
végpont EGY HTTP 200 állapotkódot ad vissza.
Miközben store
arra vár, hogy catalog-api
meggyógyuljon, az irányítópult erőforrásai így jelennek meg:
Az alkalmazásgazda állapot-ellenőrzési mechanizmusa a IHealthChecksBuilder névtérből származó Microsoft.Extensions.Diagnostics.HealthChecks implementációra épül.
Állapotellenőrzési jelentésadatok, amelyek az irányítópulton jelennek meg:
Az egyéni állapot-ellenőrzés létrehozása egyszerű. Először határozza meg az állapotellenőrzést, majd rendelje hozzá a nevét azokhoz az erőforrásokhoz, amelyekre vonatkozik.
var builder = DistributedApplication.CreateBuilder(args);
var healthyAfter = DateTime.Now.AddSeconds(20);
builder.Services.AddHealthChecks().AddCheck(
"delay20secs",
() => DateTime.Now > healthyAfter
? HealthCheckResult.Healthy()
: HealthCheckResult.Unhealthy()
);
var cache = builder.AddRedis("cache")
.WithHealthCheck("delay20secs");
builder.AddProject<Projects.MyApp>("myapp")
.WithReference(cache)
.WaitFor(cache);
Az előző példa egy állapot-ellenőrzést ad hozzá a cache
erőforráshoz, amely az alkalmazásgazda elindítása utáni első 20 másodpercben nem megfelelő állapotot jelez. Így a myapp
erőforrás 20 másodpercig várakozik a kezdés előtt, biztosítva, hogy a cache
erőforrás kifogástalan állapotban legyen.
A AddCheck és WithHealthCheck metódusok egyszerű mechanizmust biztosítanak az állapot-ellenőrzések létrehozásához és adott erőforrásokhoz való társításához.
Az alkalmazásgazda mostantól támogatja állandó tárolókat. Az állandó tárolók eltérnek .NET.NET Aspire vezényelt alkalmazásoktipikus tároló életciklusától. Bár hoztak létre, és (ha még nem érhető el) a .NET Aspire vezénylője indította el őket, .NET Aspirenem semmisítik meg őket.
Ez akkor hasznos, ha a tárolót az alkalmazásgazda leállítása után is futtatni szeretné.
Fontos
A tárolók törléséhez manuálisan kell leállítania őket a tároló futtatókörnyezetével.
Állandó élettartamú IResourceBuilder<ContainerResource>
definiálásához hívja meg a WithLifetime metódust, és adja meg a ContainerLifetime.Persistent:
var builder = DistributedApplication.CreateBuilder(args);
var queue = builder.AddRabbitMQ("rabbit")
.WithLifetime(ContainerLifetime.Persistent);
builder.AddProject<Projects.WebApplication1>("api")
.WithReference(queue)
.WaitFor(queue);
builder.Build().Run();
Az irányítópulton a perzisztens konténerek láthatók egy gombostű ikonnal.
Az alkalmazásgazda leállítása után a tároló továbbra is fut:
A tárolómegőrzési mechanizmus megpróbálja azonosítani, hogy mikor szeretné újra létrehozni a tárolót. Ha például megváltozik a tároló környezete, a tároló újraindul, így nem kell manuálisan leállítania a tárolót, ha az erőforrás bemeneti konfigurációja megváltozott.
Az alkalmazásgazda támogatja az egyéni parancsok erőforrásokhoz való hozzáadását. Ez akkor hasznos, ha olyan egyéni funkciókat szeretne hozzáadni, amelyeket az alkalmazásgazda nem támogat natív módon. Valószínűleg sok lehetőség van arra, hogy az egyéni kiterjesztési módszereket az erőforrásokon elérhetővé tegyük. A .NET.NET Aspire Közösségi eszközkészlet jó hely lehet ezeknek a bővítményeknek a megosztására.
Egyéni parancsok definiálásakor az irányítópulton felhasználói felületi funkcióként érhető el.
Fontos
Ezek a .NET.NET Aspire irányítópult-parancsok csak az irányítópult helyi futtatásakor érhetők el. Amikor az irányítópultot a Azure Container Apps-ban futtatják, nem állnak rendelkezésre.
További információ az egyéni erőforrásparancsok létrehozásáról: Útmutató: Egyéni erőforrásparancsok létrehozása .NET.NET Aspire.
Az alkalmazásgazda mostantól az összes tárolót hozzáadja egy default-aspire-network
nevű közös hálózathoz. Ez akkor hasznos, ha a tárolók közötti kommunikációt a gazdahálózat megkerülésével szeretné elvégezni. Ez megkönnyíti a docker-összeállításból az alkalmazás gazdagépére való migrálást is, mivel a tárolók a tárolónév használatával kommunikálhatnak egymással.
Az eseménymodell lehetővé teszi a fejlesztők számára, hogy az alkalmazás és az erőforrások életciklusához csatlakoznak. Ez akkor hasznos, ha egyéni kódot futtat az alkalmazás életciklusának bizonyos pontjain. Az eseményekre különböző módokon lehet feliratkozni, beleértve a globális eseményeket és az erőforrásonkénti eseményeket.
globális események:
A globális események hasonlóak az alkalmazásgazda életciklus-eseményeihez. További információ: Alkalmazásgazda életciklusai.
erőforrásonkénti események:
További információért lásd: eseménynaptár a .NET.NET Aspire-ban.
.NET .NET Aspire továbbra is olyan integrációkat ad hozzá, amelyek megkönnyítik a kedvenc szolgáltatások és eszközök használatának megkezdését. További információ: .NET.NET Aspire integrációk áttekintése.
A Redis Insights támogatása Redis erőforráson érhető el:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddRedis("redis")
.WithRedisInsight(); // Starts a Redis Insight container image
// that is pre-configured to work with the
// Redis instance.
A WithRedisInsight bővítménymetódus több Redis erőforrásra is alkalmazható, és mindegyik látható lesz az Redis Insight irányítópultján.
További információért lásd: Redis-hoz tartozó Redis erőforrás hozzáadása.
A .NET Aspire 9-től kezdve további OpenAI integráció érhető el, amely lehetővé teszi a legújabb hivatalos OpenAI dotnet-kódtár közvetlen használatát. Az ügyfélintegráció az OpenAIClient szolgáltatást egyedüli szolgáltatásként regisztrálja a szolgáltatásgyűjteményben. Az ügyfél használható a OpenAIREST API-val való interakcióhoz.
Emellett a már elérhető .NET AspireAzureOpenAI integrációs továbbfejlesztettük, hogy rugalmasan konfiguráljon egy OpenAIClient
egy Azure AI OpenAI szolgáltatáshoz vagy egy dedikált OpenAIREST API-hoz az új AddOpenAIClientFromConfiguration(IHostApplicationBuilder, String) builder metódussal. Az alábbi példa észleli, hogy a kapcsolati sztring egy AzureAzure AI OpenAI szolgáltatáshoz tartozik-e, és automatikusan regisztrálja a legmegfelelőbb OpenAIClient
-példányt.
builder.AddOpenAIClientFromConfiguration("openai");
Ha például a openai
kapcsolat úgy nézne ki, mint Endpoint=https://{account}.azure.com;Key={key};
azt feltételezné, hogy a tartománynév miatt regisztrálhat egy AzureAzure AI OpenAI ügyfelet. Ellenkező esetben egy közös OpenAIClient
-t használnának.
További részletekért olvassa el a Azureplatformfüggetlen ügyfél feloldás.
A MongoDB felhasználónév és jelszó megadásának támogatása a AddMongoDB(IDistributedApplicationBuilder, String, Nullable<Int32>, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>) bővítménymetódus használatakor. Ha nincs megadva, a rendszer létrehoz egy véletlenszerű felhasználónevet és jelszót, de manuálisan is megadható paramétererőforrásokkal.
var builder = DistributedApplication.CreateBuilder(args);
var username = builder.AddParameter("mongousername");
var password = builder.AddParameter("mongopassword", secret: true);
var db = builder.AddMongo("db", username, password);
A következő szakaszok ismertetik a Azure 9-ben hozzáadott .NET Aspire fejlesztéseket. Az összes kompatibilitástörő változás teljes listáját .NET.NET Aspire kompatibilitástörő változásai című témakörben talál.
A .NET Aspire 8-ban a Azure-erőforrások testreszabása kísérletiként lett megjelölve, mivel a mögöttes Azure.Provisioning
könyvtárak újak voltak, és visszajelzések gyűjtése után jelölhették volna őket stabilnak. A .NET.NET Aspire 9 API-k frissítése megtörtént és eltávolította a kísérleti attribútumot.
Azure erőforrás elnevezésének kompatibilitástörő módosítása
A Azure.Provisioning könyvtárak frissítésének részeként az Azure erőforrások alapértelmezett elnevezési sémája frissült, hogy jobban támogassa a különböző elnevezési szabályzatokat. Ez a frissítés azonban megváltoztatta az erőforrások elnevezését. Az új elnevezési szabályzat a meglévő Azure erőforrások elhagyását és új Azure erőforrások létrehozását eredményezheti, miután a .NET Aspire alkalmazást 8-ról 9-re frissítette. Ha folytatni szeretné a .NET.NET Aspire 8 azonos elnevezési szabályainak használatát, hozzáadhatja az alábbi kódot az AppHost Program.csfájlhoz.
var builder = DistributedApplication.CreateBuilder(args);
builder.Services.Configure<AzureProvisioningOptions>(options =>
{
options.ProvisioningBuildOptions.InfrastructureResolvers.Insert(0, new AspireV8ResourceNamePropertyResolver());
});
Azure SQL, PostgreSQLés Redis erőforrások eltérnek a többi Azure erőforrástól, mivel ezekhez a technológiákhoz helyi tárolóerőforrások tartoznak. A(z) .NET Aspire elején, ahhoz, hogy létrehozza ezeket a Azure erőforrásokat, először egy helyi tárolóerőforrással kellett kezdenie, majd vagy "As", vagy "PublishAs" műveletet alkalmaznia ahhoz, hogy Azure erőforrást hozzon létre. Ez a kialakítás problémákat vezetett be, és nem felelt meg a többi API-nak.
Előfordulhat például, hogy ez a kód szerepel a .NET.NET Aspire 8-ban:
var builder = DistributedApplication.CreateBuilder(args);
var sql = builder.AddSqlServer("sql")
.PublishAsAzureSqlDatabase();
var pgsql = builder.AddPostgres("pgsql")
.PublishAsAzurePostgresFlexibleServer();
var cache = builder.AddRedis("cache")
.PublishAsAzureSqlDatabase();
A 9-es .NET.NET Aspire ezek az API-k elavultként lettek megjelölve, és egy új API-minta lett implementálva:
var builder = DistributedApplication.CreateBuilder(args);
var sql = builder.AddAzureSqlServer("sql")
.RunAsContainer();
var pgsql = builder.AddAzurePostgresFlexibleServer("pgsql")
.RunAsContainer();
var cache = builder.AddAzureRedis("cache")
.RunAsContainer();
A .NET Aspire-alkalmazások biztonságosabbá tétele érdekében a AzurePostgreSQL- és Azure Cache for Redis-erőforrások adatbázisát alapértelmezés szerint a Microsoft Entra ID használatára frissítettük. Ehhez módosítani kell azokat az alkalmazásokat, amelyeknek csatlakozniuk kell ezekhez az erőforrásokhoz. Az alkalmazások Microsoft Entra-azonosítóval történő frissítéséhez tekintse meg az alábbi lépéseket az erőforrásokhoz való csatlakozáshoz:
Az alábbi példák bemutatják, hogyan konfigurálhatja az alkalmazást úgy, hogy a Microsoft Entra-azonosító használatával csatlakozzon az Azure erőforrásokhoz:
Ha jelszó- vagy hozzáférésikulcs-hitelesítést kell használnia (nem ajánlott), az alábbi kóddal is bejelentkezhet:
var builder = DistributedApplication.CreateBuilder(args);
var pgsql = builder.AddAzurePostgresFlexibleServer("pgsql")
.WithPasswordAuthentication();
var cache = builder.AddAzureRedis("cache")
.WithAccessKeyAuthentication();
A Azure Functions támogatása a .NET.NET Aspire problémakövető egyik legszélesebb körben igényelt funkciója, és örömmel jelentjük be, hogy ebben a kiadásban előzetes verziós támogatást nyújtunk. A támogatás bemutatásához használjuk a .NET.NET Aspire egy webhook létrehozásához és üzembe helyezéséhez.
Első lépésként hozzon létre egy új Azure Functions-projektet az Visual Studio Új projekt párbeszédpanelen. Amikor a rendszer kéri, jelölje be a Enlist Aspire orchestration jelölőnégyzetet a projekt létrehozásakor.
Az alkalmazáshoz tartozó projektben vegye észre, hogy az új PackageReference
📦Aspire .Hosting.Azure.Függvények NuGet-csomag:
<ItemGroup>
<PackageReference Include="Aspire.Hosting.AppHost" Version="9.0.0" />
<PackageReference Include="Aspire.Hosting.Azure.Functions" Version="9.0.0" />
</ItemGroup>
Ez a csomag egy AddAzureFunctionsProject<TProject>(IDistributedApplicationBuilder, String) API-t biztosít, amely az alkalmazás gazdagépén meghívható, hogy a Azure Functions-projekteket egy .NET Aspire gazdagépen konfigurálja.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureFunctionsProject<Projects.PigLatinApp>("piglatinapp");
builder.Build().Run();
Ebben a példában a webhook felelős egy bemeneti karakterlánc pig latinra való fordításáért. Frissítse az eseményindító tartalmát a következő kóddal:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using System.Text;
using FromBodyAttribute = Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute;
namespace PigLatinApp;
public class Function1(ILogger<Function1> logger)
{
public record InputText(string Value);
public record PigLatinText(string Value);
[Function("Function1")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
[FromBody] InputText inputText)
{
logger.LogInformation("C# HTTP trigger function processed a request.");
var result = TranslateToPigLatin(inputText.Value);
return new OkObjectResult(new PigLatinText(result));
}
private static string TranslateToPigLatin(string input)
{
if (string.IsNullOrEmpty(input))
{
return input;
}
var words = input.Split(' ');
StringBuilder pigLatin = new();
foreach (string word in words)
{
if (IsVowel(word[0]))
{
pigLatin.Append(word + "yay ");
}
else
{
int vowelIndex = FindFirstVowelIndex(word);
if (vowelIndex is -1)
{
pigLatin.Append(word + "ay ");
}
else
{
pigLatin.Append(
word.Substring(vowelIndex) + word.Substring(0, vowelIndex) + "ay ");
}
}
}
return pigLatin.ToString().Trim();
}
private static int FindFirstVowelIndex(string word)
{
for (var i = 0; i < word.Length; i++)
{
if (IsVowel(word[i]))
{
return i;
}
}
return -1;
}
private static bool IsVowel(char c) =>
char.ToLower(c) is 'a' or 'e' or 'i' or 'o' or 'u';
}
Állítson be egy töréspontot a logger.LogInformation
metódus első Run
sorára, és nyomja le F5 a Functions-gazdagép elindításához. Az .NET.NET Aspire irányítópult elindítása után a következőket kell megfigyelni:
.NET .NET Aspire a következőket:
A választott kedvenc HTTP-ügyfél használatával küldjön egy kérést az eseményindítónak, és figyelje meg a hibakeresőben lévő kérés törzséből érkező bemeneteket.
curl --request POST \
--url http://localhost:7282/api/Function1 \
--header 'Content-Type: application/json' \
--data '{
"value": "Welcome to Azure Functions"
}'
Most már készen áll az alkalmazás Azure Container Apps (ACA) üzembe helyezésére. Az üzembe helyezés jelenleg Azure Functions Worker és Worker SDK-csomagok előzetes buildjeitől függ. Szükség esetén frissítse a Functions-projektben hivatkozott verziókat:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="2.0.0-preview2" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.0-preview2" />
</ItemGroup>
Közzé kell tennie egy nyilvános végpontot is a Azure Functions-projekthez, hogy a kérések elküldhetők legyenek a HTTP-eseményindítónknak:
builder.AddAzureFunctionsProject<Projects.PigLatinApp>("piglatinapp")
.WithExternalHttpEndpoints();
Az alkalmazás a azd
CLIhasználatával történő üzembe helyezéséhez először a legújabb verziót kell beszereznie. A legújabb verzió telepítéséhez figyelmeztetés jelenik meg, ha a verzió elavult. Kövesse az utasításokat a legújabb verzióra való frissítéshez.
A telepítés után keresse meg az alkalmazásgazdaprojektet tartalmazó mappát, és futtassa a azd init
:
$ azd init
Initializing an app to run on Azure (azd init)
? How do you want to initialize your app? Use code in the current directory
(✓) Done: Scanning app code in current directory
Detected services:
.NET (Aspire)
Detected in: ./PigLatinApp/PigLatinApp.AppHost/PigLatinApp.AppHost.csproj
azd will generate the files necessary to host your app on Azure using Azure Container Apps.
? Select an option Confirm and continue initializing my app
? Enter a new environment name: azfunc-piglatin
Generating files to run your app on Azure:
(✓) Done: Generating ./azure.yaml
(✓) Done: Generating ./next-steps.md
SUCCESS: Your app is ready for the cloud!
Ezután telepítse az alkalmazást a azd up
futtatásával:
$ azd up
? Select an Azure Subscription to use: 130. [redacted]
? Select an Azure location to use: 50. (US) West US 2 (westus2)
Packaging services (azd package)
Provisioning Azure resources (azd provision)
Provisioning Azure resources can take some time.
Subscription: [redacted]
Location: West US 2
You can view detailed progress in the Azure Portal:
[redacted]
(✓) Done: Resource group: rg-azfunc-piglatin (967ms)
(✓) Done: Container Registry: [redacted] (13.316s)
(✓) Done: Log Analytics workspace: [redacted] (16.467s)
(✓) Done: Container Apps Environment: [redacted] (1m35.531s)
(✓) Done: Storage account: [redacted] (21.37s)
Deploying services (azd deploy)
(✓) Done: Deploying service piglatinapp
- Endpoint: {{endpoint-url}}
Aspire Dashboard: {{dashboard-url}}
Végül tesztelje az üzembe helyezett Functions-alkalmazást a kedvenc HTTP-ügyféllel:
curl --request POST \
--url {{endpoint-url}}/api/Function1 \
--header 'Content-Type: application/json' \
--data '{
"value": "Welcome to Azure Functions"
}'
A(z) Azure függvények támogatása a .NET Aspire-ben továbbra is előzetes verzióban érhető el, és korlátozott számú eseményindítót támogat, például:
További információkért lásd a hivatalos .NET AspireAzure Functions-integrációt (előzetes verzió).
Az egyik leggyakrabban kért funkció az alkalmazáshost által létrehozott Azure Container Apps testreszabása anélkül, hogy a Bicep-hez kellene nyúlni. Ez a PublishAsAzureContainerApp<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure,ContainerApp>) névtérben található PublishAsAzureContainerApp<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure,ContainerApp>) és Aspire.Hosting.Azure.AppContainers
API-k használatával lehetséges. Ezek a metódusok testre szabják az alkalmazásgazda által létrehozott Azure tárolóalkalmazás-definíciót.
Adja hozzá a csomaghivatkozást a projektfájlhoz:
<ItemGroup>
<PackageReference Include="Aspire.Hosting.Azure.AppContainers"
Version="9.0.0" />
</ItemGroup>
Az alábbi példa bemutatja, hogyan méretezhet egy Azure tárolóalkalmazást nullára (0
) replikákra:
var builder = DistributedApplication.CreateBuilder(args);
var db = builder.AddAzurePostgresFlexibleServer("pg")
.RunAsContainer()
.AddDatabase("db");
// Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
#pragma warning disable AZPROVISION001
builder.AddProject<Projects.WebApplication1>("api")
.WithReference(db)
.PublishAsAzureContainerApp((module, containerApp) =>
{
// Scale to 0
containerApp.Template.Value!.Scale.Value!.MinReplicas = 0;
});
#pragma warning restore AZPROVISION001
builder.Build().Run();
Az előző példakód a Azure tárolóalkalmazás definíciójának létrehozását az alkalmazás gazdagépére hárítja. Ez lehetővé teszi a Azure tárolóalkalmazás definíciójának testreszabását anélkül, hogy futtatnia kellene a azd infra synth
-et vagy veszélyesen módosítania kellene a létrehozott bicep-fájlokat.
.NET Aspire-visszajelzés
A(z) .NET Aspire egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást:
esemény
Intelligens alkalmazások létrehozása
márc. 17. 21 - márc. 21. 10
Csatlakozzon a meetup sorozathoz, hogy valós használati esetek alapján, skálázható AI-megoldásokat hozzon létre más fejlesztőkkel és szakértőkkel.
RegisztrációOktatás
Modul
.NET Aspire-alkalmazás testreszabása meglévő Azure-erőforrások használatára - Training
Ebben a modulban megtudhatja, hogyan helyezheti át az Azure-ban üzemeltetett .NET Aspire-alkalmazás háttérszolgáltatásait a tárolókból a natív Azure-szolgáltatásokba.
Tanúsítvány
Microsoft Certified: Azure Developer Associate - Certifications
A Microsoft Azure-ban végpontok közötti megoldásokat hozhat létre az Azure Functions létrehozásához, webalkalmazások implementálásához és kezeléséhez, az Azure Storage használatával történő megoldások fejlesztéséhez stb.
Dokumentáció
Az első .NET.NET Aspire megoldás létrehozása - .NET Aspire
Megtudhatja, hogyan hozhatja létre első .NET Aspire megoldását az .NET Aspire Elindított alkalmazás sablonnal.
.NET Aspire hozzáadása meglévő .NET alkalmazáshoz - .NET Aspire
Megtudhatja, hogyan adhat hozzá .NET.NET Aspire integrációkat, vezénylést és eszközöket egy már létező mikroszolgáltatási alkalmazáshoz.
.NET .NET Aspire eszközök - .NET Aspire
Ismerje meg a .NET.NET Aspirealapvető eszközhasználati fogalmait.