ASP.NET Core Blazor barındırma modelleri

Blazor, Blazor Server bir webassemblytabanlı .net runtime () üzerinde tarayıcıda ASP.NET Core () veya istemci tarafında sunucu tarafında çalışacak şekilde tasarlanan bir web çerçevesidir Blazor WebAssembly . Barındırma modelinden bağımsız olarak, uygulama ve bileşen modelleri aynıdır.

Blazor Server

Blazor Serverbarındırma modeliyle, uygulama sunucuda ASP.NET Core bir uygulama içinden yürütülür. Kullanıcı Arabirimi güncelleştirmeleri, olay işleme ve JavaScript çağrıları bir bağlantı üzerinden işlenir SignalR .

tarayıcı,::: no-loc (signalr)::: connection üzerinden sunucu üzerinde uygulamayla (bir ASP.NET Core uygulama içinde barındırılan) etkileşime girer.

ASP.NET Core uygulama, eklenecek uygulamanın sınıfına başvurur Startup :

  • Sunucu tarafı hizmetler.
  • İstek işleme işlem hattının uygulaması.

İstemcide, blazor.server.js komut dosyası SignalR sunucu ile bağlantı kurar. betik, ASP.NET Core paylaşılan çerçevede eklenmiş bir kaynaktan istemci tarafı uygulamaya sunulur. İstemci tarafı uygulama, gerektiğinde uygulama durumunu kalıcı hale getirmekten ve geri yüklemekten sorumludur.

Blazor ServerBarındırma modeli çeşitli avantajlar sunar:

  • İndirme boyutu bir uygulamadan önemli ölçüde küçüktür Blazor WebAssembly ve uygulama çok daha hızlı yüklenir.
  • Uygulama, .NET Core ile uyumlu API 'lerin kullanımı dahil olmak üzere sunucu olanaklarından tam olarak yararlanır.
  • Sunucuda .NET Core, uygulamayı çalıştırmak için kullanılır, bu nedenle hata ayıklama gibi mevcut .NET araçları beklendiği gibi çalışır.
  • Ölçülü istemciler desteklenir. Örneğin uygulamalar, Blazor Server WebAssembly ve kaynak kısıtlı cihazlarda bulunan tarayıcılarla çalışır.
  • Uygulamanın bileşen kodu da dahil olmak üzere, uygulamanın .NET/C# kod tabanı istemcilere sunulmuyor.

Önemli

Bir Blazor Server uygulama, sunucu üzerinde kullanıcı arabirimi durumunu oluşturan ilk istemci isteğine yanıt olarak ön ekler. İstemci bir bağlantı oluşturmayı denediğinde SignalR , istemci aynı sunucuya yeniden bağlanmalıdır. Blazor Server birden fazla arka uç sunucusu kullanan uygulamalar, bağlantılar için yapışkan oturumlar uygulamalıdır SignalR . Daha fazla bilgi için sunucu bağlantısı bölümüne bakın.

Blazor ServerBarındırma modeli aşağıdaki sınırlamalara sahiptir:

  • Daha yüksek gecikme süresi genellikle vardır. Her Kullanıcı etkileşimi bir ağ atmasını içerir.
  • Çevrimdışı destek yoktur. İstemci bağlantısı başarısız olursa, uygulama çalışmayı durduruyor.
  • Ölçeklenebilirlik, çok sayıda kullanıcısı olan uygulamalar için zorlayıcı bir uygulamalardır. Sunucunun birden çok istemci bağlantısını yönetmesi ve istemci durumunu işlemesi gerekir.
  • uygulamayı çalıştırmak için bir ASP.NET Core sunucusu gerekir. uygulamaya bir Content Delivery Network (CDN) sunma gibi sunucusuz dağıtım senaryoları mümkün değildir.

Bir uygulama oluşturmak için Blazor Server , bkz ASP.NET Core için araç Blazor ..

Blazor ServerUygulama modeli Docker kapsayıcılarınıdestekler. Visual Studio docker desteği için, Visual Studio projede projeye sağ tıklayın ve > docker desteği ekle ' yi seçin.

Sunucu tarafından işlenmiş Kullanıcı arabirimine karşılaştırma

uygulamaları anlamanın bir yolu Blazor Server , görünümleri veya sayfaları kullanarak ASP.NET Core uygulamalarda kullanıcı arabirimi oluşturma için geleneksel modellerden nasıl farklılık gösterir Razor Razor . Her iki model de, işleme için HTML içeriğini betimleyen Razor dili kullanır, ancak biçimlendirmenin nasıl işlendiği konusunda önemli ölçüde farklılık gösterir.

Bir Razor sayfa veya görünüm işlendiğinde, her Razor kod satırı metın biçiminde HTML yayar. Oluşturulduktan sonra sunucu, üretilen herhangi bir durum da dahil olmak üzere sayfayı veya görünüm örneğini ortadan kaldırır. Sayfa için başka bir istek gerçekleştiğinde, örneğin sunucu doğrulaması başarısız olduğunda ve doğrulama özeti görüntülendiğinde:

  • Sayfanın tamamı HTML metnine yeniden eklenir.
  • Sayfa istemciye gönderilir.

BlazorUygulama, bileşen olarak adlandırılan Kullanıcı arabiriminin yeniden kullanılabilir öğelerinden oluşur. Bir bileşen C# kodu, biçimlendirme ve diğer bileşenleri içerir. Bir bileşen işlendiğinde, bir Blazor HTML veya XML belge nesne modeli (DOM) gibi dahil edilen bileşenlerin bir grafiğini üretir. Bu grafik, özelliklerde ve alanlarında tutulan bileşen durumunu içerir. Blazor biçimlendirmenin ikili gösterimini üretmek için bileşen grafiğini değerlendirir. İkili biçimi şu şekilde olabilir:

  • HTML metnine açıldı (prerendering sırasında † ).
  • Düzenli işleme sırasında biçimlendirmeyi verimli bir şekilde güncelleştirmek için kullanılır.

Prerendering: istenen Razor Bileşen, sunucuda statik HTML 'ye derlendi ve istemciye gönderildiğinde, kullanıcıya işlendiğinde. İstemci ve sunucu arasında bağlantı kurulduktan sonra, bileşenin statik ön işlenmiş öğeleri etkileşimli öğelerle değiştirilmiştir. Prerendering, uygulamanın kullanıcıya daha fazla yanıt vermesini sağlar.

İçindeki bir kullanıcı arabirimi güncelleştirmesi Blazor tarafından tetiklenir:

  • Düğme seçme gibi kullanıcı etkileşimi.
  • Zamanlayıcı gibi uygulama Tetikleyicileri.

Bileşen grafiği yeniden kullanılır ve bir UI farkı (fark) hesaplanır. Bu fark, istemcideki Kullanıcı arabirimini güncelleştirmek için gereken en küçük DOM düzenlemelerinin kümesidir. Fark istemciye bir ikili biçimde gönderilir ve tarayıcı tarafından uygulanır.

Kullanıcı, istemci üzerinde bundan uzaklaştığında bir bileşen atılmış olur. Bir Kullanıcı bir bileşenle etkileşim kurarken, bileşenin durumu (hizmetler, kaynaklar) sunucunun belleğinde tutulmalıdır. Birçok bileşenin durumu sunucu tarafından eşzamanlı olarak Korunabileceğinden, bellek tükenmesi sorunu ele alınmalıdır. Blazor ServerSunucu belleğinin en iyi şekilde kullanılmasını sağlamak üzere bir uygulama yazma hakkında yönergeler için, bkz Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server ..

Uygulanıp

Bir Blazor Server uygulama ASP.NET Core SignalR üzerine kurulmuştur. Her istemci, devre adlı bir veya daha fazla bağlantı üzerinden sunucusuyla iletişim kurar SignalR . Devre, Blazor SignalR geçici ağ kesintilerine tolerans sağlayan bağlantılar üzerinde soyutlamadır. Blazorİstemci SignalR bağlantının kesileceğini gördüğünde, yeni bir bağlantı kullanarak sunucuya yeniden bağlanmaya çalışır SignalR .

Bir uygulamaya bağlı her tarayıcı ekranı (tarayıcı sekmesi veya iframe) Blazor Server bir SignalR bağlantı kullanır. Bu, tipik sunucu tarafından işlenmiş uygulamalarla karşılaştırıldığında daha önemli bir ayırım ifade etmiştir. Sunucu tarafından işlenen bir uygulamada, aynı uygulamayı birden çok tarayıcı ekranında açmak genellikle sunucuda ek kaynak taleplerine çevirilmez. Bir Blazor Server uygulamada, her tarayıcı ekranı için ayrı bir devre ve sunucu tarafından yönetilecek bileşen durumunun ayrı örnekleri gerekir.

Blazor tarayıcı sekmesini kapatmayı veya bir dış URL 'ye gidilmesini göz önünde bulundurur. Düzgün sonlandırma durumunda, devre ve ilişkili kaynaklar hemen serbest bırakılır. Bir istemci, örneğin bir ağ kesintisi nedeniyle düzgün şekilde kesilmeyen bir şekilde kesilebilir. Blazor Server istemcinin yeniden bağlanmasına izin vermek için, yapılandırılabilir bir Aralık için bağlantısı kesilen devreleri depolar.

Blazor Server kodun bir Kullanıcı devresi durumunda değişiklikler üzerinde kod çalıştırmaya izin veren bir devhandler tanımlamasına olanak tanır. Daha fazla bilgi için bkz. BlazorASP.NET Core SignalRkılavuz.

UI gecikmesi

UI gecikme süresi, başlatılan bir eylemden Kullanıcı arabiriminin güncelleştirildiği zamana kadar geçen süredir. Bir uygulamanın kullanıcıya yanıt vermesi için kullanıcı ARABIRIMI gecikmesi için daha küçük değerler zorunludur. Bir Blazor Server uygulamada, her eylem sunucusuna gönderilir, işlenir ve bır UI farkı geri gönderilir. Sonuç olarak, UI gecikmesi ağ gecikme süresinin toplamı ve eylemi işlerken sunucu gecikmesi sayısıdır.

Özel bir kurumsal ağla sınırlı bir iş uygulaması için, ağ gecikmesi nedeniyle kullanıcı gecikmesi algılarını üzerindeki etki, genellikle çok sayıda CEPSİZ olur. Internet üzerinden dağıtılan bir uygulama için, özellikle de kullanıcılar coğrafi olarak coğrafi olarak dağıtılmışsa gecikme süresi kullanıcılara karşı farklılık gösterebilir.

Bellek kullanımı ayrıca uygulama gecikme süresine de katkıda bulunabilir. Daha fazla bellek kullanımı, her ikisi de uygulama performansının düşmesine neden olan ve bu nedenle kullanıcı arabirimi gecikmesini arttığı diskte sık görülen çöp toplama veya disk belleği belleği

Blazor Server Ağ gecikmesi ve bellek kullanımını azaltarak Kullanıcı arabirimi gecikmesini en aza indirmek için uygulamalar iyileştirilmelidir. Ağ gecikmesini ölçmeye yönelik bir yaklaşım için bkz ASP.NET Core barındırma ve dağıtma Blazor Server .. Ve hakkında daha fazla bilgi için SignalR Blazor bkz.

Sunucuyla bağlantı

Blazor Server uygulamalar sunucuya etkin bir SignalR bağlantı gerektirir. Bağlantı kaybolursa, uygulama sunucuya yeniden bağlanmaya çalışır. İstemcinin durumu sunucunun belleğinde kaldığı sürece, istemci oturumu durum kaybı olmadan devam eder.

Bir Blazor Server uygulama, sunucu üzerinde kullanıcı arabirimi durumunu oluşturan ilk istemci isteğine yanıt olarak ön ekler. İstemci bir bağlantı oluşturmayı denediğinde SignalR , istemci aynı sunucuya yeniden bağlanmalıdır. Blazor Server birden fazla arka uç sunucusu kullanan uygulamalar, bağlantılar için yapışkan oturumlar uygulamalıdır SignalR .

Uygulamalar için Azure SignalR hizmetini kullanmanızı öneririz Blazor Server . Hizmet, bir Blazor Server uygulamayı çok sayıda eşzamanlı bağlantıya ölçeklendirmeye olanak tanır SignalR . Sticky Sessions, SignalR hizmetin ServerStickyMode seçenek veya yapılandırma değeri olarak ayarlanarak Azure hizmeti için etkinleştirilir Required . Daha fazla bilgi için bkz. ASP.NET Core barındırma ve dağıtma Blazor Server.

IIS kullanırken, yapışkan oturumlar uygulama Isteği yönlendirme ile etkinleştirilir. Daha fazla bilgi için bkz. uygulama Isteği yönlendirme kullanarak HTTP yük dengelemesi.

Blazor WebAssembly

Blazor WebAssembly uygulamalar, bir WebAssembly tabanlı .NET çalışma zamanında tarayıcıda istemci tarafı çalıştırır. BlazorUygulama, bağımlılıkları ve .NET çalışma zamanı tarayıcıya indirilir. Uygulama doğrudan tarayıcı kullanıcı arabirimi iş parçacığında yürütülür. UI güncelleştirmeleri ve olay işleme aynı işlem içinde oluşur. Uygulamanın varlıkları, istemcilere statik içerik sunan bir Web sunucusuna veya hizmete statik dosyalar olarak dağıtılır.

::: No-Loc (Blazor WebAssembly):::: No-Loc (Blazor)::: uygulama, tarayıcı içindeki bir kullanıcı arabirimi iş parçacığında çalışır.

uygulama, Blazor WebAssembly dosyalarını sunacak bir arka uç ASP.NET Core uygulaması olmadan dağıtım için oluşturulduğunda, uygulamaya tek başına Blazor WebAssembly uygulama denir. Uygulama, dosyalarını sunacak bir arka uç uygulamasıyla dağıtım için oluşturulduğunda, uygulamaya barındırılan Blazor WebAssembly uygulama denir. Barındırılan bir Blazor WebAssembly Client uygulama, genellıkle Server Web API çağrıları veya () kullanılarak ağ üzerinden arka uç uygulamasıyla etkileşime girer SignalR ile ASP.NET Core kullanma SignalRBlazor .

blazor.webassembly.jsBetik, Framework ve işleyiciler tarafından sağlanır:

  • .NET çalışma zamanını, uygulamayı ve uygulamanın bağımlılıklarını indirme.
  • Uygulamayı çalıştırmak için çalışma zamanının başlatılması.

Blazor WebAssemblyBarındırma modeli çeşitli avantajlar sunar:

  • .NET sunucu tarafı bağımlılığı yoktur. Uygulama istemciye indirildikten sonra tam olarak çalışır.
  • İstemci kaynakları ve yetenekleri tamamen yararlanılabilir.
  • İş sunucudan istemciye boşaltılır.
  • uygulamayı barındırmak için bir ASP.NET Core web sunucusu gerekli değildir. uygulamaya bir Content Delivery Network (CDN) sunma gibi sunucusuz dağıtım senaryoları mümkündür.

Blazor WebAssemblyBarındırma modeli aşağıdaki sınırlamalara sahiptir:

  • Uygulama tarayıcının özelliklerine kısıtlıdır.
  • Uyumlu istemci donanımı ve yazılımı (örneğin, WebAssembly desteği) gereklidir.
  • İndirme boyutu daha büyüktür ve uygulamaların yüklenmesi daha uzun sürer.

Bir uygulama oluşturmak için Blazor WebAssembly , bkz ASP.NET Core için araç Blazor ..

Barındırılan Blazor uygulama modeli Docker kapsayıcılarınıdestekler. Visual Studio ' de docker desteği için, Server barındırılan bir çözümün projesine sağ tıklayın Blazor WebAssembly ve > docker desteği ekle ' yi seçin.

Blazor WebAssembly .NET Core Framework kitaplıklarından ve çalışma zamanından kullanılmayan kodu kırpma desteği içerir Blazor . Daha fazla bilgi için ASP.NET Core Blazor Genelleştirme ve yerelleştirme ve Konak ve dağıtım ASP.NET Core Blazor WebAssembly bölümlerine bakın.

Blazor WebAssembly , .NET kodunuzu doğrudan WebAssembly ' de derleyebileceğiniz, güncel (AOT) derlemeyidestekler. AOT derlemesi, daha büyük bir uygulama boyutunun masrafına yönelik çalışma zamanı performans geliştirmeleriyle sonuçlanır. Daha fazla bilgi için bkz. Konak ve dağıtım ASP.NET Core Blazor WebAssembly.

Blazor WebAssembly .NET Core Framework kitaplıklarından kullanılmayan kodu kırpma desteği içerir. Daha fazla bilgi için bkz. ASP.NET Core Blazor Genelleştirme ve yerelleştirme.

Ek kaynaklar