📢
.NET Aspire 9.0, .NET Aspire'nin bir sonraki genel kullanılabilirlik (GA) sürümüdür ve , her iki'ü de destekler.
.NET 8.0 Uzun Vadeli Destek (LTS) veya
.NET 9.0 Standart Terim Desteği (STS).
Not
.NET Aspire 9.0'ı .NET 8 veya .NET 9 ile kullanabilirsiniz!
Bu sürüm, topluluktan en çok istenen özelliklerden ve sorun noktalarından bazılarını ele alır. En iyi özellikler topluluk odaklıdır! Topluluğa katılmak için bizi Discord'da ziyaret ederek ekip üyeleriyle sohbet edin ve
GitHubüzerinde bizimle işbirliği yapın.
Resmi .NET sürümü ve .NET Aspire sürüm desteği hakkında daha fazla bilgi için bkz:
.NET Aspire'ın önceki sürümlerinden .NET Aspire 9'a yükseltmek için resmi .NET.NET Aspire 9 yükseltme kılavuzundaki yönergeleri izleyin. Kılavuz, mevcut .NET Aspire çözümlerinizi .NET Aspire 9'a yükseltme hakkında ayrıntılı yönergeler sağlar. El ile veya Yükseltme Yardımcısı'nı kullandığınız fark etmeksizin, kılavuz işlemi hızlı ve kolay hale getirir.
Araç geliştirmeleri
.NET Aspire 9, ortamınızı .NET Aspire uygulamaları geliştirecek şekilde yapılandırmayı kolaylaştırır. Artık bir .NET iş yüküne ihtiyacınız yoktur. Bunun yerine, yeni .NET.NET Aspire SDK.NET.NET Aspire çözümlerinizin uygulama ana bilgisayar projesine yüklersiniz. Daha fazla bilgi için bkz. .NET.NET Aspire kurulum ve araçlar.
Şablonlar taşındı
.NET
.NET Aspire 9, iş yükü aracılığıyla yüklenen içerikleri ayrı NuGet paketlerine taşıyor. Bu, yeni .NET.NET Aspire projeleri ve çözümleri oluşturmaya yönelik şablonları içerir. Bu şablonlar komutu kullanılarak yüklenir. Bunlar aşağıdaki komut çalıştırılarak yüklenebilir:
.NET CLI
dotnetnew install Aspire.ProjectTemplates::9.0.0
İpucu
.NET
.NET Aspire iş yükünü zaten yüklediyseniz, var olan şablonların üzerine yazmak için --force bayrağını geçirmeniz gerekir.
.NET
.NET Aspire iş yükünü kaldırmaktan çekinmeyin.
Daha fazla bilgi için bkz. şablonları.
Pano UX geliştirmeleri ve yeni etkileşim özellikleri
Pano için en çok istenen özellik, düzenlenmiş adlandırılmış kaynaklarınızın yaşam döngülerini yönetmektir. Özel olarak, kaynakları durdurma, başlatma ve yeniden başlatma özelliği. Bu özellik projeler, kapsayıcılar ve yürütülebilir dosyalar için çalışır. Uygulama ana bilgisayarının tamamını yeniden başlatmak zorunda kalmadan tek tek kaynakların yeniden başlatılmasını sağlar. Hata ayıklayıcı proje kaynaklarına bağlandığında, yeniden başlatıldığında tekrar bağlanır. Daha fazla bilgi için bkz. .NET.NET Aspire pano: Kaynağı durdur veya başlat.
Mobil ve duyarlı destek
.NET Aspire panosu artık mobil kullanıma uygundur, çok çeşitli ekran boyutlarına duyarlı bir şekilde uyarlanır ve dağıtılan .NET Aspire uygulamalarının hareketsiz yönetimine olanak tanır. Ayarların görüntülenmesi ve mobil cihazlarda içerik taşması da dahil olmak üzere diğer erişilebilirlik iyileştirmeleri yapıldı.
Kaynak ayrıntılarında hassas özellikler, depolama birimleri ve sağlık kontrolleri
Kaynak ayrıntılarının görüntülenmesi çeşitli geliştirmeler içerir:
Özellikler, pano kullanıcı arabiriminde otomatik olarak maskelenmek üzere hassas olarak işaretlenebilir. Bu güvenlik özelliği, panoyu başkalarıyla ekran paylaşımı sırasında anahtarları veya parolaları yanlışlıkla açıklamaktan kaçınmaya yardımcı olur. Örneğin, kapsayıcıların bağımsız değişkenleri hassas bilgileri içerebilir ve bu nedenle varsayılan olarak gizlenir.
Yapılandırılan konteyner hizmet hacimleri kaynak ayrıntılarında listelenir.
.NET
.NET Aspire 9, sağlık kontrolleri için destek ekler. Bu denetimlerle ilgili ayrıntılı bilgiler artık kaynak ayrıntıları bölmesinde görüntülenebilir ve kaynağın neden iyi durumda değil veya düzeyi düşürülmüş olarak işaretlenebileceğini gösterir. Sağlık kontrolleri hakkında daha fazla bilgi edinin burada.
Renkli konsol günlüğü
ANSI kaçış kodları renkleri (ön plan ve arka plan) ve kalın, altı çizili ve italik gibi stilleri denetleyerek terminallerdeki metinleri biçimlendirin. Daha önce, panonun konsol günlükleri sayfası aynı anda yalnızca bir ANSI kaçış kodu işleyebiliyor ve birden çok kod birleştirildiğinde başarısız oluyordu. Örneğin, kırmızı metin görüntüleyebilir, ancak hem kırmızı hem de kalın metinleri görüntülemez.
@mangeg tarafından topluluğa sağlanan katkı, ANSI kaçış kodları desteğini geliştirdi ve bu sınırlamayı kaldırdı.
Konsol günlüklerinde yapılan bir diğer geliştirme de desteklenmeyen kaçış kodlarını gizlemektir. İmleci konumlandırma veya işletim sistemiyle iletişim kurma gibi metin görüntülemeyle ilgili olmayan kodlar bu kullanıcı arabiriminde anlamlı değildir ve gizlenir.
Telemetri kullanıcı odaklı eklemeler
Telemetri.NET.NET Aspire'ün önemli bir unsuru olmaya devam ediyor.
.NET
.NET Aspire 9'da Telemetri hizmetine birçok yeni özellik eklendi.
Geliştirilmiş telemetri filtrelemesi
İzlemeler öznitelik değerleriyle filtrelenebilir. Örneğin, uygulamanızda yalnızca bir uç noktanın izlemelerini görüntülemek istiyorsanız, HTTP isteklerindeki http.route özniteliği belirtilen bir değere göre filtrelenebilir.
Telemetri filtrelemesi, mevcut değerlerin otomatik tamamını da destekler.
Filtre ekle iletişim kutusu, panonun sağladığı değerlerden seçim yapmak için bir açılır liste sunar. Bu özellik, gerçek verilere filtre uygulamayı çok daha kolay hale getirir ve kendiniz bir değer girerek yazım hatalarını önlemeye yardımcı olur.
Birden çok kaynaktan gelen telemetriyi birleştirme
Bir kaynağın birden çok çoğaltması olduğunda, artık telemetri verilerini tüm örneklerden aynı anda görüntülemek için filtreleyebilirsiniz.
(application)etiketli ana kaynağı seçin. Daha fazla bilgi için .NET.NET Aspire panosuna bakın: Birden çok kaynaktan telemetriyibirleştirin.
Tarayıcı telemetri desteği
Pano, HTTP ve çıkış noktaları arası kaynak paylaşımı (CORS) üzerinden OpenTelemetry Protokolü'ne (OTLP) destek sağlar. Bu özellikler tarayıcı uygulamalarından OpenTelemetry panosuna .NET Aspire gönderme özelliğinin kilidini açar.
Örneğin, tarayıcı tabanlı tek sayfalı bir uygulama (SPA), tarayıcıda oluşturulan yapılandırılmış günlükleri, izleri ve ölçümleri kontrol paneline göndermek için JavaScript SDK OpenTelemetry yapılandırabilir. Tarayıcı telemetrisi, sunucu telemetrisi ile birlikte görüntülenir.
Tarayıcı telemetrisini yapılandırma hakkında daha fazla bilgi için tarayıcı telemetrisini etkinleştirme belgelerine bakın.
Uygulama Konağı (Orkestrasyon)
.NET
.NET Aspire uygulama konağı, en önemli özelliklerinden biridir .NET.NET Aspire'nin.
.NET
.NET Aspire 9'da, uygulama konağına özgü birkaç yeni özellik eklendi.
Bağımlılıklar bekleniyor
Eğer .NET.NET Aspire'i takip ediyorsanız, uygulama barındırma projenizin uygulama modelinizi tanımladığınız yer olduğunu zaten biliyorsunuzdur. Dağıtılmış bir uygulama oluşturucu oluşturur, kaynakları ekleyip yapılandırıp bağımlılıklarını ifade edebilirsiniz. Şimdi, bir kaynağın başlamadan önce başka bir kaynak için beklemesi belirtebilirsiniz. Bu, yalnızca bağımlılıkları "hazır" olduğunda kaynakları başlatarak başlatma sırasında bağlantı hatalarını önlemeye yardımcı olabilir.
C#
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();
Uygulama konağı başlatıldığında, rabbit kaynağının hazır olmasını bekler, sonra api kaynağını başlatır.
Bir kaynak için beklemek üzere sunulan iki yöntem vardır:
WaitFor: Başka bir kaynağı başlatmadan önce kaynağın hazır olmasını bekleyin.
WaitForCompletion: Başka bir kaynağı başlatmadan önce kaynağın tamamlanmasını bekleyin.
WaitFor API,bir kaynağın hazır olup olmadığını belirlemek için standart .NET sistem durumu denetimleri kullanır. Peki "bir kaynağın hazır olması" ne anlama geliyor? En iyi yanı, tüketici tarafından varsayılan değerlerinin ötesinde yapılandırılabilir olmasıdır.
Bir kaynak herhangi bir sağlık denetimi sağlamadığında (uygulamada sağlık denetimi kayıtlı değilse), uygulama barındırıcısı, bağımlı kaynağı başlatmadan önce kaynağın Running durumunda olmasını bekler.
HTTP uç noktalarını kullanıma sunan kaynaklar için, HTTP 200 yanıtı için belirli bir yolu yoklayan bir sistem durumu denetimini kolayca ekleyebilirsiniz.
C#
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();
Önceki örnek, catalog-api kaynağına bir sağlık kontrolü ekler. Uygulama konağı, store kaynağını başlatmadan önce sistem durumu denetiminin sağlıklı bir durum döndürmesini bekler.
/health uç noktası HTTP 200 durum kodu döndürdüğünde kaynağın hazır olduğunu belirler.
storecatalog-api iyi duruma gelmesini beklerken panodaki kaynaklar şöyle görünür:
başlamadan önce iyi durumda olmayan bir kaynak bekleniyor
Sağlık kontrolleri, panoda görüntülenen rapor verilerini bildirir.
Sağlık denetimi ayrıntıları, panonun kaynak ayrıntıları görünümünde
Özel bir sağlık kontrolü oluşturmak basittir. Başlamak için sağlık denetimini tanımlayın, ardından adını uygulanacağı kaynaklarla ilişkilendirin.
C#
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);
Yukarıdaki örnek, cache kaynağına, uygulama konağı başlatıldıktan sonraki ilk 20 saniye boyunca iyi durumda olmadığını bildiren bir sistem durumu denetimi ekler. Bu nedenle, myapp kaynağı başlamadan önce 20 saniye bekler ve cache kaynağının iyi durumda olduğundan emin olur.
AddCheck ve WithHealthCheck yöntemleri, sistem durumu denetimleri oluşturmak ve bunları belirli kaynaklarla ilişkilendirmek için basit bir mekanizma sağlar.
Kalıcı kapsayıcılar
Uygulama konağı artık kalıcı kapsayıcılarını destekliyor. Kalıcı kapsayıcılar, düzenlemeli uygulamaların tipik kapsayıcı yaşam döngüsünden sapar. ve , her zaman mevcut olmadıklarında, düzenleyici tarafından oluşturulur ve başlatılır; ancak tarafından yok edilmezler.
Bu, uygulama konağı durdurulduktan sonra bile kapsayıcıyı çalışır durumda tutmak istediğinizde kullanışlıdır.
Önemli
Bu kapsayıcıları silmek için, kapsayıcı çalışma zamanını kullanarak bunları el ile durdurmanız gerekir.
Uygulama konağı durdurulduktan sonra kapsayıcı çalışmaya devam eder:
Kapsayıcı kalıcılığı mekanizması, kapsayıcıyı ne zaman yeniden oluşturmak isteyebileceğinizi belirlemeye çalışır. Örneğin, kapsayıcının ortamı değişirse, kaynağın giriş yapılandırması değiştiyse kapsayıcıyı el ile durdurmanız gerekmeyecek şekilde kapsayıcı yeniden başlatılır.
Kaynak komutları
Uygulama konağı kaynaklara özel komut eklemeyi destekler. Bu, uygulama konağı tarafından yerel olarak desteklenmeyen özel işlevler eklemek istediğinizde kullanışlıdır. Kaynaklar üzerinde özel uzantı yöntemlerinin kullanıma sunılmasının yararlı olacağı birçok fırsat vardır.
.NET
.NET Aspire Topluluk Araç Seti bu uzantıları paylaşmak için iyi bir yer olabilir.
Özel bir komut tanımladığınızda, bu komut kullanıcı deneyimi özelliği olarak panoda kullanılabilir.
Önemli
Bu .NET.NET Aspire pano komutları yalnızca pano yerel olarak çalıştırılırken kullanılabilir. Onlar, kontrol paneli Azure Container Appsçalıştırılırken mevcut değiller.
Özel kaynak komutları oluşturma hakkında daha fazla bilgi için bkz. Nasıl yapılır: .NET.NET Aspireiçinde özel kaynak komutları oluşturma.
Kapsayıcı ağ iletişimi
Uygulama konağı artık tüm kapsayıcıları default-aspire-networkadlı ortak bir ağa ekler. Bu, konak ağından geçmeden kapsayıcılar arasında iletişim kurmak istediğinizde kullanışlıdır. Bu, kapsayıcıların kapsayıcı adını kullanarak birbirleriyle iletişim kurabilmesi nedeniyle docker compose'dan uygulama konağına geçiş yapmayı da kolaylaştırır.
Olay modeli
Olay modeli, geliştiricilerin uygulama ve kaynakların yaşam döngüsüne bağlanmasını sağlar. Bu, uygulama yaşam döngüsünün belirli noktalarında özel kod çalıştırmak için kullanışlıdır. Genel olaylar ve kaynak başına olaylar dahil olmak üzere olaylara abone olmanın çeşitli yolları vardır.
Küresel etkinlikler:
BeforeStartEvent: Uygulama başlamadan önce tetiklenen bir olay. Bu, uygulama modelinde yapılan değişikliklerin gözlemlendiği son yerdir. Bu, hem "Çalıştır" hem de "Yayımla" modlarında çalışır. Bu engelleyici bir olaydır, yani tüm işleyiciler tamamlanana kadar uygulama başlatılmaz.
AfterResourcesCreatedEvent: Kaynaklar oluşturulduktan sonra tetiklenen bir olay. Bu, yalnızca Çalıştırma modunda çalışır.
AfterEndpointsAllocatedEvent: Tüm kaynaklar için uç noktalar ayrıldıktan sonra tetiklenen bir olay. Bu, yalnızca Çalıştırma modunda çalışır.
BeforeResourceStartedEvent: Tek bir kaynak başlatılmadan önce tetiklenen olay. Bu, yalnızca Çalıştırma modunda çalışır. Bu engelleyici bir olaydır, yani tüm işleyiciler tamamlanana kadar kaynak başlatılmaz.
ConnectionStringAvailableEvent: Bir kaynak için bağlantı dizesi kullanılabilir olduğunda tetiklenen olay. Bu, yalnızca Çalıştırma modunda çalışır.
ResourceReadyEvent: Kaynak kullanılmaya hazır olduğunda tetiklenen olay. Bu, yalnızca Çalıştırma modunda çalışır.
.NET
.NET Aspire sık kullandığınız hizmetleri ve araçları kullanmaya başlamayı kolaylaştıran tümleştirmeler eklemeye devam eder. Daha fazla bilgi için bkz. .NET.NET Aspire tümleştirmelere genel bakış.
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.
WithRedisInsight uzantısı yöntemi birden çok Redis kaynağına uygulanabilir ve her bir kaynak Redis Insight panosunda görünür.
Insight panosunda birden çok Redis örneğini gösteren
Daha fazla bilgi için bkz. Insightsile kaynağı ekleme .
OpenAI (Önizleme)
.NET Aspire 9'dan başlayarak, en son resmi OpenAI dotnet kitaplığını doğrudan kullanmaya olanak tanıyan ek bir OpenAI tümleştirmesi mevcuttur. İstemci tümleştirmesi, OpenAIClient hizmet koleksiyonunda tek bir hizmet olarak kaydeder. İstemci, OpenAIREST API'siyle etkileşime geçmek için kullanılabilir.
Ayrıca, zaten kullanılabilir .NET AspireAzureOpenAI tümleştirme, yeni OpenAIClient oluşturucu yöntemiyle bir Azure AI OpenAI hizmeti veya ayrılmış bir OpenAIREST API'si için AddOpenAIClientFromConfiguration(IHostApplicationBuilder, String) yapılandırmanın esnek bir yolunu sağlayacak şekilde geliştirilmiştir. Aşağıdaki örnek, bağlantı dizesinin bir AzureAzure AI OpenAI hizmetine yönelik olup olmadığını algılar ve en uygun OpenAIClient örneğini otomatik olarak kaydeder.
Örneğin, openai bağlantısı Endpoint=https://{account}.azure.com;Key={key}; gibi görünse, etki alanı adı nedeniyle bir AzureAzure AI OpenAI istemcisi kaydedebileceğini tahmin ederdi. Aksi halde yaygın bir OpenAIClient kullanılacaktır.
var builder = DistributedApplication.CreateBuilder(args);
var username = builder.AddParameter("mongousername");
var password = builder.AddParameter("mongopassword", secret: true);
var db = builder.AddMongo("db", username, password);
Önemli Azure geliştirmeleri
Aşağıdaki bölümlerde Azure 9'da eklenen .NET Aspire iyileştirmeler açıklanmaktadır. Kritik değişikliklerin tam listesi için bkz. .NET.NET Aspire 9'da.
Azure kaynak özelleştirmesi
.NET Aspire 8'de, temel alınan Azure kitaplıkları yeni olduğundan ve kararlı olarak işaretlenmeden önce geri bildirim toplamak amacıyla Azure.Provisioning kaynakları özelleştirme deneysel olarak işaretlendi.
.NET
.NET Aspire 9'da bu API'ler güncelleştirildi ve deneysel özniteliğini kaldırır.
Azure Kaynak adlandırmada kapsamlı değişiklik
Azure.Provisioning kitaplıkları güncelleştirmesinin bir parçası olarak, Azure kaynaklar için varsayılan adlandırma düzeni çeşitli adlandırma ilkeleri için daha iyi destekle güncelleştirildi. Ancak bu güncelleştirme, kaynakların adlarında değişiklik olmasına neden oldu. Yeni adlandırma ilkesi, Azure uygulamanızı 8'den 9'a güncelleştirdikten sonra mevcut Azure kaynaklarının terk edilmesine ve yeni .NET Aspire kaynaklarının oluşturulmasına neden olabilir.
.NET
.NET Aspire 8'den aynı adlandırma ilkelerini kullanmaya devam etmek için AppHost Program.csaşağıdaki kodu ekleyebilirsiniz:
C#
var builder = DistributedApplication.CreateBuilder(args);
builder.Services.Configure<AzureProvisioningOptions>(options =>
{
options.ProvisioningBuildOptions.InfrastructureResolvers.Insert(0, new AspireV8ResourceNamePropertyResolver());
});
Azure SQL, PostgreSQLve Redis Update
Azure SQL, PostgreSQLve Redis kaynakları, bu teknolojiler için yerel kapsayıcı kaynakları olduğundan diğer Azure kaynaklarından farklıdır.
.NET Aspire 8'de, bu Azure kaynaklarını oluşturmak için yerel bir kapsayıcı kaynağıyla başlamanız ve ardından bir Azure kaynağında "As" veya "PublishAs" kullanmanız gerekir. Bu tasarımda sorunlar ortaya çıkmıştır ve diğer API'lere uygun değildir.
Örneğin, .NET.NET Aspire 8'de bu koda sahip olabilirsiniz:
C#
var builder = DistributedApplication.CreateBuilder(args);
var sql = builder.AddSqlServer("sql")
.PublishAsAzureSqlDatabase();
var pgsql = builder.AddPostgres("pgsql")
.PublishAsAzurePostgresFlexibleServer();
var cache = builder.AddRedis("cache")
.PublishAsAzureSqlDatabase();
.NET
.NET Aspire 9'da bu API'ler kullanım dışı olarak işaretlendi ve yeni bir API düzeni uygulandı:
C#
var builder = DistributedApplication.CreateBuilder(args);
var sql = builder.AddAzureSqlServer("sql")
.RunAsContainer();
var pgsql = builder.AddAzurePostgresFlexibleServer("pgsql")
.RunAsContainer();
var cache = builder.AddAzureRedis("cache")
.RunAsContainer();
Varsayılan olarak Microsoft Entra ID
.NET Aspire uygulamaları daha güvenli hale getirmek için Azure ve PostgreSQL kaynakları için Azure Cache for Redis Veritabanı varsayılan olarak Microsoft Entra Id kullanacak şekilde güncelleştirildi. Bu, bu kaynaklara bağlanması gereken uygulamalarda değişiklik yapılmasını gerektirir. Bu kaynaklara bağlanmak için Microsoft Entra Id kullanacak uygulamaları güncelleştirmek için aşağıdakilere bakın:
Parola veya erişim anahtarı kimlik doğrulaması kullanmanız gerekiyorsa (önerilmez), aşağıdaki kodu kabul edebilirsiniz:
C#
var builder = DistributedApplication.CreateBuilder(args);
var pgsql = builder.AddAzurePostgresFlexibleServer("pgsql")
.WithPasswordAuthentication();
var cache = builder.AddAzureRedis("cache")
.WithAccessKeyAuthentication();
Azure İşlevleri desteği (Önizleme)
Azure İşlevleri desteği, .NET.NET Aspire sorun izleyicisinde en çok istenen özelliklerden biridir ve bu sürümde bunun için önizleme desteği sunacağımız için heyecanlıyız. Bu desteği göstermek için, bir webhook oluşturup dağıtmak amacıyla .NET.NET Aspire kullanalım.
Başlamak için Yeni Proje iletişim kutusunu kullanarak yeni bir İşlevleri projesi oluşturun. Size sorulduğunda, projeyi oluştururken Enlist'i Aspire düzenleme onay kutusunda seçin.
Uygulama ana bilgisayar projesinde yeni PackageReference NuGet paketi için bir 📦 olduğunu gözlemleyin.
var builder = DistributedApplication.CreateBuilder(args);
builder.AddAzureFunctionsProject<Projects.PigLatinApp>("piglatinapp");
builder.Build().Run();
Bu örnekte, web kancası bir giriş dizesini Pig Latin'e çevirmekle sorumludur. Tetikleyicimizin içeriğini aşağıdaki kodla güncelleştirin:
C#
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;
namespacePigLatinApp;
publicclassFunction1(ILogger<Function1> logger)
{
publicrecordInputText(string Value);
publicrecordPigLatinText(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);
returnnew OkObjectResult(new PigLatinText(result));
}
privatestaticstringTranslateToPigLatin(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();
}
privatestaticintFindFirstVowelIndex(string word)
{
for (var i = 0; i < word.Length; i++)
{
if (IsVowel(word[i]))
{
return i;
}
}
return-1;
}
privatestaticboolIsVowel(char c) =>
char.ToLower(c) is'a'or'e'or'i'or'o'or'u';
}
logger.LogInformation yönteminin ilk Run satırında bir kesme noktası ayarlayın ve İşlevler ana bilgisayarını başlatmak için F5 basın.
.NET
.NET Aspire panosu başlatıldığında aşağıdakileri gözlemlersiniz:
.NET
.NET Aspire sahiptir:
Öykünmüş bir Azure Depolama kaynağı, konak tarafından muhasebe için kullanılmak üzere yapılandırıldı.
Hedef olarak kayıtlı olan İşlevler projesiyle Functions ana bilgisayarını yerel olarak başlattı.
İşlevler projesinin launchSettings.json tanımlanan bağlantı noktasını dinlemek için kablolu olarak bağlayın.
Tetikleyiciye istek göndermek ve hata ayıklayıcıdaki istek gövdesinden bağlanan girişleri gözlemlemek için tercih ettiğiniz HTTP istemcisini kullanın.
curl --request POST \
--url http://localhost:7282/api/Function1 \
--header 'Content-Type: application/json' \
--data '{
"value": "Welcome to Azure Functions"
}'
PowerShell
curl --request POST `
--url http://localhost:7282/api/Function1 `
--header'Content-Type: application/json' `
--data'{
"value": "Welcome to Azure Functions"
}'
Artık uygulamamızı Azure Container Apps (ACA)'ya dağıtmaya hazırsınız. Dağıtım şu anda Azure Functions Worker ile Çalışan SDK paketlerinin önizleme sürümlerine bağlıdır. Gerekirse İşlevler projesinde başvuruda bulunan sürümleri yükseltin:
uygulamayı CLIile dağıtmak için önce en son sürümü edinmeniz gerekir. En son sürümü yüklemek için, sürümünüz güncel değilse bir uyarı görürsünüz. En son sürüme güncelleştirmek için yönergeleri izleyin.
Yüklendikten sonra, uygulama konak projesini içeren klasöre gidin ve azd initçalıştırın:
Azure Developer CLI
$ 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!
Ardından azd upçalıştırarak uygulamayı dağıtın:
Azure Developer CLI
$ 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}}
Son olarak, sık kullandığınız HTTP istemcisini kullanarak dağıtılan İşlevler uygulamanızı test edin:
Aşağıdaki örnekte, Azure Kapsayıcı Uygulamasının sıfır (0) çoğaltmalara nasıl ölçeklendirilecekleri gösterilmektedir:
C#
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.#pragmawarning disable AZPROVISION001
builder.AddProject<Projects.WebApplication1>("api")
.WithReference(db)
.PublishAsAzureContainerApp((module, containerApp) =>
{
// Scale to 0
containerApp.Template.Value!.Scale.Value!.MinReplicas = 0;
});
#pragmawarning restore AZPROVISION001
builder.Build().Run();
Önceki kod örneği, Azure Kapsayıcı Uygulaması tanımının oluşturulmasını uygulama konağına erteler. Bu, Azure çalıştırmanıza ve oluşturulan bicep dosyalarını güvenli bir şekilde değiştirmenize gerek kalmadan azd infra synth Kapsayıcı Uygulaması tanımını özelleştirmenize olanak tanır.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET Aspire geri bildirimi
.NET Aspire, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Azure İşlevleri oluşturmak, web uygulamalarını uygulamak ve yönetmek, Azure depolamayı kullanan çözümler geliştirmek ve daha fazlasını yapmak için Microsoft Azure'da uçtan uca çözümler oluşturun.
Dağıtılmış uygulamalar oluşturmaya yönelik buluta hazır bir yığın olan .NET Aspire hakkında bilgi edinin. API başvurusuna, öğreticilere ve daha fazlasına göz atın.