.NET 8.0 Önizlemesi: Sunucu Tarafı Oluşturmada SPA Adaları
.NET 8.0 Önizleme 5, yeni Blazor Web Uygulaması proje şablonuyla planlanan Blazor United’ın öncüsünü sunar. Burada geliştiriciler, sunucu tarafı bir web uygulamasının ayrı sayfalarını Blazor Server ile tek sayfa uygulaması olarak uygulayabilir. Blazor United, ASP.NET Core geliştirme ekibi tarafından Ocak 2023’te duyurulan, Blazor’u saf sunucu tarafı işleme ile genişletme ve eski Blazor Server ve Blazor WebAssembly mimari modellerini tamamlayarak kullanıcıdan render niyetleri.
Yeni proje şablonu işinizi kolaylaştırmalı
ASP.NET Core geliştirme ekibi bu planı ilk olarak Youtube’da duyurdu. Blazor Sunucu tarafı işleme, .NET 8.0 Preview 3’ten beri mevcuttur. Ancak daha önce, geliştiricilerin bir ASP.NET Core MVC veya Razor Pages projesi oluşturması ve bazı değişiklikleri manuel olarak yapması gerekiyordu. .NET 8.0 Önizleme 5 ve Visual Studio 2022 17.7 Önizleme 2’de bulunan “Blazor Web Uygulaması” proje şablonunda artık durum böyle değil. Böyle bir proje, komut satırı aracılığıyla aşağıdaki şekilde oluşturulabilir:
dotnet new blazor -o Projektname
Visual Studio’da, .NET 8.0 Preview 5 SDK kuruluyken, geliştirme ekipleri Şekil 1’de gösterilen proje şablonu girişini göreceklerdir.
Visual Studio 2022 17.7 Önizleme 2’de sunucu tarafında oluşturulmuş bir Blazor web uygulaması için proje şablonu (Şekil 1).
(Resim: Microsoft)
Proje daha sonra aşağıdakiler gibi gerekli tüm başlangıç kodu çağrılarını içerir: AddRazorComponents() VE MapRazorComponents<App>()entegre yönlendirme ile App.razor başlatma bileşenini ifade eder. Bireysel bileşenler (MainLayout.razor, Index.razor, NavMenu.razor ve ShowData.razor proje şablonunda) artık Önizleme 3 ve 4’teki gibi arayüze ihtiyaç duymaz. IRazorComponentApplication uygulamak. ShowData.razor bileşeni şu eklemeye sahiptir:
@attribute [StreamRendering(true)]
Bu, Önizleme 4’te tanıtılan akışı gösterir. Şekil 2, ShowData.razor’ın hangi akışları gösterdiğini gösterir: İlk olarak, sunucuda görüntülenen ve tarayıcının halihazırda görüntülemekte olduğu tam bir sayfa (burada bir yükleme ipucu ile birlikte, 13. ve 24. satırlara bakın, şekil 2). ASP.NET Core, tüm eşzamansız işlemlerin gecikmeli gelen sonuçlarını HTML yanıtının kendisinde sayfaya eklemeye devam eder (bkz. <template> 33 ve 37. sıralarda, Şekil 2). Orijinal sayfanın alt kısmında yüklenen blazor.web.js JavaScript dosyası, etiketleri oluşturur <template> Sayfada bulunan HTML parçacıkları daha sonra ilk görüntülenen sayfaya entegre edilir, böylece kullanıcılar yükleme bildirimi yerine hava durumu verileri tablosunu biraz gecikmeli olarak görürler.
Blazor SSR’ye Sunucu Akışı: Sonra
blazor.web.js’nin sayfaya eklediği aynı HTML yanıtında daha sonra giriş parçacıkları var (Şekil 2).
(Resim: Dr. Holger Schwichtenberg)
Sunucu tarafı oluşturmada SPA adası
Visual Studio’da komut satırında sunucu tarafı oluşturma ile Blazor Sunucusu arasında bir entegrasyon içeren bir proje şablonu oluşturmak henüz mümkün değildir:
dotnet new blazor --use-server -o Projektname
Geliştiriciler daha sonra çağrı zincirini başlangıç dosyasında görür:
builder.Services.AddRazorComponents().AddServerComponents();
ve ardından Counter.razor bileşeninde ekleme:
@attribute [RenderModeServer]
Bu, Liste 1’de de görülebilir.
@page "/counter"
@attribute [RenderModeServer]
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
Liste 1: Counter.razor, sunucu tarafında oluşturulmuş web uygulaması içindeki bir SPA adasıdır
Bu, sunucu tarafı oluşturma içinde tek sayfalı bir uygulamaya yol açar – url/sayaçtaki bu sayfa, kullanıcı etkileşimlidir. Yani bir websocket bağlantısı üzerinden sadece sayfa değişikliklerini ileterek sayaç herhangi bir gecikme olmaksızın tıklandığında değişir. Bununla birlikte, web uygulamasındaki diğer tüm göreli adresler, yalnızca HTTP aracılığıyla (web soketleri olmadan) tam sayfaları sunucu tarafında oluşturmaya devam eder. Şekil 3, işleme seçeneklerini (Blazor SSR akışsız ve akışlı) ve Blazor Sunucusunu tek bir şemada göstermektedir.Üç varyanttaki bileşenler bir web uygulamasında mümkündür, aynı iş mantığına erişebilir ve ortak uygulamanın bir durumuna sahip olabilir.
Bir ASP.NET Core web uygulamasında, geliştiriciler artık sunucu tarafı işleme, akış ve Blazor Server’ı birleştirebilir (Şekil 3).
(Resim: Dr. Holger Schwichtenberg)
Bununla birlikte, “Blazor United” başarısı elde edilene kadar, .NET 8.0 hala üç puan uzakta:
- Blazor WebAssembly entegrasyonu, bireysel sayfalar için Blazor Server ile aynı şekilde.
- Blazor Server ve Blazor WebAssembly’ı farklı bir Blazor tadıyla oluşturulmuş bir bileşen içindeki ayrı bileşenler için kullanmak daha kolay.
- Sunucu tarafında oluşturulmuş bir sayfanın Blazor Server’a ve ardından Blazor WebAssembly’a sorunsuz geçişi (“sayfayı nemlendirme”).
Blazor WebAssembly için .NET 8.0 Önizleme 4’ten beri kullanılabilen WebCIL formatı artık tüm web projelerinde varsayılandır.Ayrıca Microsoft, formatı standart WebAssembly modüllerinin dosya adı uzantısı .wasm ile oluşturulacak şekilde uyarlamıştır (Önizleme 4’te hala .webcil). WebAssembly modüllerine sahip WebCIL, güvenlik duvarlarının ve antivirüs yazılımlarının Blazor WebAssembly’ı engellemesini önlemek için tasarlanmıştır. Ayrıca WebCIL’i devre dışı bırakabilirsiniz:
<WasmEnableWebcil>false</WasmEnableWebcil>
Microsoft, bunun gerekli olabileceği durumlarda blog gönderisinde açık bırakır. Önceden standart, dosyaların .dll uzantısına sahip olmasını gerektiriyordu.
ASP.NET Core SignalR ile hata toleransı
ASP.NET Core SignalR Bildirim Hizmeti (iX sayı 6/2023’teki uygulamalı makale) artık kısa süreli bağlantı kesintilerinden sonra bağlantıyı otomatik ve sorunsuz bir şekilde geri yükleyebilir. .NET 8.0 Önizleme 5’te, yalnızca .NET istemcileriyle çalışır. Bu hata toleransının henüz bir yapılandırması yok, ancak bu daha sonra gelecek. İstemci eklentiye bağlanmalıdır UseAcks = true inşa etmek:
var hubConnection = new HubConnectionBuilder()
.WithUrl("https://ServerName/Hub">",
options =>
{
options.UseAcks = true;
})
.Build();
Blazor Server, sayfadaki değişiklikleri yayınlamak için ASP.NET Core SignalR kullandığından bu hataya dayanıklılıktan da yararlanacaktır. Önizleme 3’ten beri kullanılabilen ASP.NET Core Minimal WebAPI için erken derleme, artık ASP.NET Core Minimal WebAPI ile oluşturulan karmaşık nesneleri işleyebilir [AsParameters] açıklamalıdırlar.
Kimlik sunucusu kapalı
Mayıs 2023’teki BUILD konferansında duyurulduğu üzere Microsoft, Duende Identity Server’ı ASP.NET Core arka ucuna sahip React ve Angular projeleri için proje şablonlarından yasakladı. .NET geliştirme ekibi, açık kaynak yazılım olarak 1’den 4’e kadar olan sürümlerde bulunan ve kar amacı gütmeyen .NET Vakfı’nın bir projesi olan Identity Server’ın artık ticari bir ürün olması nedeniyle bunu yapmak zorunda hissetti. Yalnızca açık kaynak projeleri lisans ücretlerinden muaftır.
Bahsedilen Microsoft proje şablonları artık ASP.NET Core’da yerleşik olan kimlik sistemini temel almaktadır. .NET 8.0 Preview 4 ile başlayan ASP.NET Core Identity Management, HTML kullanıcı arayüzüne ek olarak WebAPI uç noktaları sundu. Microsoft, Identity Server’ı kullanmaya devam etmek isteyen geliştiricileri Duende belgelerine yönlendirir. Ayrıca Microsoft, .NET 8.0 Önizleme 5’teki bazı sınıfların hata ayıklayıcı görünümünü iyileştirmiştir (Şekil 4).
ASP.NET Core projelerinde iyileştirilmiş hata ayıklayıcı görüntüsü (Şekil 4).
(Resim: Microsoft)
.NET 8.0’da daha fazla değişiklik
Bir blog gönderisinde Microsoft, ASP.NET Core ve Blazor dışında .NET 8.0’da yapılan diğer değişiklikleri listeler. Bu, ölçüm API’sindeki basitleştirmeleri içerir. Daha önce ayrı bir NuGet paketi olarak sunulan Source Link, NuGet paketlerinin kaynak kodunda hata ayıklamak için artık .NET SDK ile tümleştirilmiştir. .NET 8.0 Preview 5, IndexOf() == 0 yerine StartsWith() ve Any() yerine Uzunluk, Sayı ve IsEmpty gibi yeniden düzenleme özelliklerine sahip bir dizi yeni kod çözümleyici sunar.
İle bir .NET uygulamasının bir sürümünü oluşturduğunuzda dotnet publish köklü bir değişim var. Seçeneğin çalışma zamanı tanımlayıcısını belirtirken --runtime (alias -r) İLE dotnet publishörneğin içeride
dotnet publish --runtime win-arm64
yalnızca oluşturulan uygulamanın kendisini değil, aynı zamanda çalışma zamanı tanımlayıcısına karşılık gelen .NET çalışma zamanı ortamını da içeren sözde bağımsız bir uygulama (SCA) her zaman yaratılmıştır.
Bu, derlenen dosyanın çok büyük teslim edilmesini sağladı. .NET 8.0 Preview 5 ile başlayarak, çalışma zamanı tanımlayıcısının belirtilmesi, yalnızca ilgili platformda çalışan ancak ilişkili çalışma zamanı ortamını otomatik olarak içermeyen bir uygulama oluşturur. Geliştiriciler çalışma zamanı ortamını bir araya getirmek istiyorsa, bu parametredir. --self-contained VEYA <SelfContained>true</SelfContained> proje dosyasında açıkça gerekli. Bu, geliştiricilere daha fazla esneklik sağlar. Bununla ilgili olarak, yayınlama seçenekleri için davranış değişiklikleri de vardır. <PublishTrimmed> VE <PublishReadyToRun>.
Microsoft, .NET uygulamalarını hızlandırmak için artık standart olarak .NET 6.0’da sunulan Dinamik Profil Kılavuzlu Optimizasyon’u (PGO) kullanıyor. Bunu istemeyen geliştiriciler bundan sonra bunu yapmak zorunda kalacak <TieredPGO>false</TieredPGO> proje dosyasında belirtin. PGO, uygulamaların davranışını (özellikle program parçalarının kullanılma sırasını) analiz eder ve ardından tam zamanında derleyiciyi optimize eder, böylece program başlangıcında istenen program kodu tercihen derlenir ve uygulama daha hızlı başlar.
(FM)
Haberin Sonu