BlazorASP.NET Core SignalRkılavuz
Bu makalede uygulamalarda bağlantıları yapılandırma ve SignalR Blazor yönetme açıklanmıştır.
Yapılandırmayla ilgili ASP.NET Core SignalR için belgelerin alanında yer ASP.NET Core giriş SignalR alan konulara bakın. Barındırılan SignalR bir çözüme eklenenleri yapılandırmak Blazor WebAssembly içinbkz. ASP.NET Core SignalR yapılandırmada .
SignalR kimlik doğrulaması için çıkış noktası arası anlaşma ( Blazor WebAssembly )
'nin SignalR temel istemcisini s veya HTTP kimlik doğrulaması üst bilgileri gibi cookie kimlik bilgilerini gönderecek şekilde yapılandırmak için:
Çıkış SetBrowserRequestCredentials noktası arası Include isteklerde ayarlamak için
fetchkullanın.IncludeRequestCredentialsMessageHandler.cs:using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Components.WebAssembly.Http; public class IncludeRequestCredentialsMessageHandler : DelegatingHandler { protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include); return base.SendAsync(request, cancellationToken); } }Hub bağlantısının yerleşik olduğu yerde seçeneğini HttpMessageHandler HttpMessageHandlerFactory attayabilirsiniz:
HubConnectionBuilder hubConnecton; ... hubConnecton = new HubConnectionBuilder() .WithUrl(new Uri(NavigationManager.ToAbsoluteUri("/chathub")), options => { options.HttpMessageHandlerFactory = innerHandler => new IncludeRequestCredentialsMessageHandler { InnerHandler = innerHandler }; }).Build();Yukarıdaki örnek, hub bağlantı URL'sini ' de mutlak URI adresine yapılandırıyor. Bu, bileşeninde öğretici ile kullanılan
/chathubSignalR BlazorIndexURL' dir (Pages/Index.razor). URI, örneğin , veya yapılandırması aracılığıyla bir dizehttps://signalr.example.comaracılığıyla da ayarlanır.
Daha fazla bilgi için bkz. ASP.NET Core SignalR yapılandırmada.
İşleme modu ( Blazor WebAssembly )
kullanan bir uygulama, sunucuda önceden iş yapılandırmak üzere yapılandırılmışsa, sunucuya istemci bağlantısı kurulmadan önce bir ön hata Blazor WebAssembly SignalR oluşur. Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
- ASP.NET Core'de Bileşen Etiketi ASP.NET Core
- ASP.NET Core bileşenlerini önceden ASP.NET Core Razor ve tümleştirin
Uygulamalar için ek Blazor WebAssembly kaynaklar
Uygulamalar için devre Blazor Server işleyicisi seçenekleri
Bağlantı hattı Blazor Server aşağıdaki tabloda gösterilen ile CircuitOptions yapılandırılır.
| Seçenek | Varsayılan | Description |
|---|---|---|
| DetailedErrors | false |
Bağlantı hattında işlanmamış bir özel durum oluştuğunda veya JS birlikte çalışma yoluyla bir .NET yöntemi çağrılsa bir özel durumla sonuçlandı ise JavaScript'e ayrıntılı özel durum iletileri gönderin. |
| DisconnectedCircuitMaxRetained | 100 | Sunucunun aynı anda bellekte yer alan bağlantısız bağlantı hattı sayısı üst sayısı. |
| DisconnectedCircuitRetentionPeriod | 3 dakika | Bağlantısı kesilmiş bir bağlantı hattı kapatılana kadar bellekte tutulacak maksimum süre. |
| JSInteropDefaultCallTimeout | 1 dakika | Zaman uyumsuz bir JavaScript işlevi çağrılmadan önce sunucunun bekleyeceği en uzun süre. |
| MaxBufferedUnacknowledgedRenderBatches | 10 | Sağlam yeniden bağlanmayı desteklemek için sunucunun belirli bir zamanda bağlantı hattı başına bellekte tutarken en fazla bilgisiz işleme toplu işi sayısı. Sınıra ulaştıktan sonra, istemci tarafından bir veya daha fazla toplu iş onay gelene kadar sunucu yeni işleme toplu işleri üretmeyi durdurur. |
içinde seçenekleri, için Program.cs temsilci olarak bir seçenekle yapılandırabilirsiniz. AddServerSideBlazor Aşağıdaki örnek, önceki tabloda gösterilen varsayılan seçenek değerlerini atar. ad alanını Program.cs () System kullandığını using System; onaylayın.
Program.cs içinde:
builder.Services.AddServerSideBlazor(options =>
{
options.DetailedErrors = false;
options.DisconnectedCircuitMaxRetained = 100;
options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(3);
options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(1);
options.MaxBufferedUnacknowledgedRenderBatches = 10;
});
'yi yapılandırmak HubConnectionContext için ile HubConnectionContextOptions AddHubOptions kullanın. Seçenek açıklamaları için ASP.NET Core SignalR yapılandırmada bkz. . Aşağıdaki örnek varsayılan seçenek değerlerini atar. ad alanını Program.cs () System kullandığını using System; onaylayın.
Program.cs içinde:
builder.Services.AddServerSideBlazor()
.AddHubOptions(options =>
{
options.ClientTimeoutInterval = TimeSpan.FromSeconds(30);
options.EnableDetailedErrors = false;
options.HandshakeTimeout = TimeSpan.FromSeconds(15);
options.KeepAliveInterval = TimeSpan.FromSeconds(15);
options.MaximumParallelInvocationsPerClient = 1;
options.MaximumReceiveMessageSize = 32 * 1024;
options.StreamBufferCapacity = 10;
});
Blazor Hub uç noktası rota yapılandırması ( Blazor Server )
uygulamasında, Program.cs Blazor Server uygulamalar MapBlazorHub çağrısıyla uygulamasını Blazor Hub uygulamanın varsayılan yoluna eşler. Betik Blazor Server ( ) tarafından oluşturulan uç noktayı otomatik olarak blazor.server.js MapBlazorHub belirtir.
Düşünce Yansıması arabiriminde bağlantı durumunu seçin ( Blazor Server )
İstemci bağlantının kayıp olduğunu algılasa, istemci yeniden bağlanmaya çalışırken kullanıcıya varsayılan bir kullanıcı arabirimi görüntülenir. Yeniden bağlantı başarısız olursa kullanıcıya yeniden deneme seçeneği sağlanır.
Kullanıcı arabirimini özelleştirmek için, sayfanın içinde ile id components-reconnect-modal bir öğesi <body> _Layout.cshtml Razor tanımlayın.
Pages/_Layout.cshtml:
<div id="components-reconnect-modal">
...
</div>
Sitenin stil sayfası için aşağıdaki CSS stillerini ekleyin.
wwwroot/css/site.css:
#components-reconnect-modal {
display: none;
}
#components-reconnect-modal.components-reconnect-show {
display: block;
}
Aşağıdaki tabloda, çerçeve tarafından öğesine uygulanan CSS components-reconnect-modal sınıfları Blazor açıkmektedir.
| CSS sınıfı | Gösterir… |
|---|---|
components-reconnect-show |
Bağlantının kaybedildi. İstemci yeniden bağlanmaya çalışıyor. Kalıcıyı gösterir. |
components-reconnect-hide |
Sunucuyla etkin bir bağlantı yeniden kurulur. Kalıcı yöntemi gizleyin. |
components-reconnect-failed |
Büyük olasılıkla bir ağ hatası nedeniyle yeniden bağlantı başarısız oldu. Yeniden bağlanmayı denemeniz için window.Blazor.reconnect() JavaScript'te çağrısı kullanın. |
components-reconnect-rejected |
Yeniden bağlantı reddedildi. Sunucuya ulaşıldı ancak bağlantı reddedildi ve kullanıcının sunucu durumu kayboldu. Uygulamayı yeniden yüklemek için location.reload() JavaScript'te çağrısı kullanın. Bu bağlantı durumu şu durumla sonuçlanabilirsiniz:
|
İşleme modu ( Blazor Server )
Varsayılan Blazor Server olarak, uygulamalar sunucuyla istemci bağlantısı kurulmadan önce kullanıcı arabirimini önceden ayarlar. Daha fazla bilgi için bkz. ASP.NET Core'de Bileşen Etiketi ASP.NET Core.
Blazor startup ( Blazor Server )
Dosyada uygulamanın Blazor Server devresini el SignalR ile başlatmayı Pages/_Layout.cshtml yapılandırma:
autostart="false"Betiğin<script>etiketine bir öznitelikblazor.server.jsekleyin.- Betiğin etiketinin
Blazor.startardından veblazor.server.jskapanış etiketinin içine<script>çağıran bir betik</body>ekleyin.
Devre autostart dışı bırakılmıştır, uygulamanın bağlantı hattına bağımlı olmayan herhangi bir yönü normal şekilde çalışır. Örneğin, istemci tarafı yönlendirme çalışır durumdadır. Ancak, bağlantı hattına bağlı olan tüm yönleri çağrılana kadar Blazor.start çalışır durumda değildir. Uygulama davranışı, önceden kurulmuş bir bağlantı hattı olmadan tahmin edilemez. Örneğin, bağlantı hattı bağlantısı kesildiğinde bileşen yöntemleri yürütülenemz.
Belge hazır olduğunda başlatma ve JS Promise'e zincirleme dahil olmak üzere daha fazla Blazor bilgi içinbkz. ASP.NET Core Blazor Başlangıç .
İstemci SignalR günlüğünü yapılandırma ( Blazor Server )
İstemci oluşturucuda, günlük configureSignalR düzeyiyle çağıran configureLogging yapılandırma nesnesini iletir.
Pages/_Layout.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
configureSignalR: function (builder) {
builder.configureLogging("information");
}
});
</script>
</body>
Yukarıdaki örnekte, information günlük düzeyine LogLevel.Information eşdeğerdir.
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Yeniden bağlantı işleyicisini değiştirme ( Blazor Server )
Yeniden bağlanma işleyicinin bağlantı hattı bağlantı olayları, aşağıdakiler gibi özel davranışlar için değiştirilebilir:
- Bağlantının bırakılırsa kullanıcıya bildirme.
- Bağlantı hattı bağlandığında günlüğe kaydetme (istemciden) gerçekleştirmek için.
Bağlantı olaylarını değiştirmek için, aşağıdaki bağlantı değişiklikleri için geri çağırmaları kaydedin:
- Bırakılan bağlantılar
onConnectionDownkullanır. - Kurulan/yeniden kurulan bağlantılar
onConnectionUpkullanır.
Hem onConnectionDown hem onConnectionUp de belirtilmelidir.
Pages/_Layout.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
reconnectionHandler: {
onConnectionDown: (options, error) => console.error(error),
onConnectionUp: () => console.log("Up, up, and away!")
}
});
</script>
</body>
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Yeniden bağlanma yeniden deneme sayısını ve aralığını ( Blazor Server ) ayarlayın
Yeniden bağlanma yeniden deneme sayısını ve aralığını ayarlamak için, her yeniden deneme girişimi için izin verilen yeniden deneme sayısını ( ) ve dönemi milisaniye maxRetries cinsinden ayarlayın retryIntervalMilliseconds ( ).
Pages/_Layout.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
reconnectionOptions: {
maxRetries: 3,
retryIntervalMilliseconds: 2000
}
});
</script>
</body>
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Yeniden bağlantı ekranı gizleme veya değiştirme ( Blazor Server )
Yeniden bağlantı görüntülemesini gizlemek için yeniden bağlantı işleyicisini boş bir _reconnectionDisplay nesneye ( veya ) {} new Object() ayarlayın.
Pages/_Layout.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
window.addEventListener('beforeunload', function () {
Blazor.defaultReconnectionHandler._reconnectionDisplay = {};
});
Blazor.start();
</script>
</body>
Yeniden bağlantı görüntülemesini değiştirmek için, _reconnectionDisplay önceki örnekte öğesini görüntüleme öğesine ayarlayın:
Blazor.defaultReconnectionHandler._reconnectionDisplay =
document.getElementById("{ELEMENT ID}");
Yer {ELEMENT ID} tutucu, görüntülemek istediğiniz HTML öğesinin kimliğidir.
Başlatma hakkında daha fazla bilgi için Blazor bkz ASP.NET Core Blazor Başlangıç ..
transition-delayKalıcı öğe için SITENIN CSS 'deki özelliğini ayarlayarak yeniden bağlantı görüntülenmeden önce gecikmeyi özelleştirin. Aşağıdaki örnek, 500 MS (varsayılan) olan geçiş gecikmesini 1.000 MS (1 saniye) olarak ayarlar.
wwwroot/css/site.css:
#components-reconnect-modal {
transition: visibility 0s linear 1000ms;
}
BlazorDevresini istemciden bağlantısını kesme ( Blazor Server )
Varsayılan olarak, Blazor unload sayfa etkinliği tetiklendiğinde devre dışı bırakıldığında bağlantı kesilir. Bu bağlantı devresinin, istemcideki diğer senaryolara karşı bağlantısını kesmek için Blazor.disconnect uygun olay işleyicisini çağırın. Aşağıdaki örnekte, sayfa gizli olduğunda devre dışı bırakıldığında bağlantı kesilir ( pagehide olay):
window.addEventListener('pagehide', () => {
Blazor.disconnect();
});
Başlatma hakkında daha fazla bilgi için Blazor bkz ASP.NET Core Blazor Başlangıç ..
Blazor Server devre işleyici
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. Devre işleyici, CircuitHandler uygulamanın hizmet kapsayıcısındaki sınıfından türeterek ve kayıt işleminden uygulanır. Bir devre işleyicinin aşağıdaki örneği açık SignalR bağlantıları izler.
TrackingCircuitHandler.cs:
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.Server.Circuits;
public class TrackingCircuitHandler : CircuitHandler
{
private HashSet<Circuit> circuits = new();
public override Task OnConnectionUpAsync(Circuit circuit,
CancellationToken cancellationToken)
{
circuits.Add(circuit);
return Task.CompletedTask;
}
public override Task OnConnectionDownAsync(Circuit circuit,
CancellationToken cancellationToken)
{
circuits.Remove(circuit);
return Task.CompletedTask;
}
public int ConnectedCircuits => circuits.Count;
}
Devre işleyicileri DI kullanılarak kaydedilir. Kapsamlı örnekler, bir devrenin örneği başına oluşturulur. TrackingCircuitHandlerÖnceki örnekte kullanılarak, tüm devrelerin durumunun izlenmesi gerektiğinden tek bir hizmet oluşturulur.
Program.cs:
builder.Services.AddSingleton<CircuitHandler, TrackingCircuitHandler>();
Özel bir devre işleyicisindeki Yöntemler işlenmeyen bir özel durum oluşturuyorsam, özel durum devre için önemli olur Blazor Server . Bir işleyicinin kodundaki veya yöntemleri çağrılan özel durumlara tolerans sağlamak için kodu bir veya daha fazla try-catch deyimde hata işleme ve günlüğe kaydetme ile sarın.
Bir kullanıcının bağlantısı kesilmediği ve Framework devre durumunu temizlemede bir devre dışı bırakıldığında, çerçeve devre dışı bırakıldı. Kapsamı elden atılırken, uygulayan hiçbir devre kapsamlı dı hizmeti yok System.IDisposable . Herhangi bir DI hizmeti, elden çıkarma sırasında işlenmeyen bir özel durum oluşturursa, çerçeve özel durumu günlüğe kaydeder.
Azure SignalR hizmeti ( Blazor Server )
Microsoft Azure ' de barındırılan uygulamalar için Azure SignalR hizmetini kullanmanızı öneririz Blazor Server . Hizmet, uygulamanın hub 'ı ile birlikte çalışarak Blazor Blazor Server çok sayıda eşzamanlı bağlantı için bir uygulamayı ölçeklendirmeye çalışır SignalR . Ayrıca, SignalR hizmetin küresel erişim ve yüksek performanslı veri merkezleri Coğrafya nedeniyle gecikme süresini azaltmaya önemli ölçüde yardımcı olur. Azure hizmetinde prerendering desteği için SignalR , uygulamayı yapışkan oturumları kullanacak şekilde yapılandırın. Daha fazla bilgi için bkz. ASP.NET Core barındırma ve dağıtma Blazor Server.
Uygulamalar için ek kaynaklar Blazor Server
- ASP.NET Core giriş SignalR
- ASP.NET Core SignalR yapılandırmada
- Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server
- Blazor Server yeniden bağlanma olayları ve bileşen yaşam döngüsü olayları
- Azure hizmeti nedir SignalR ?
- Azure hizmeti için performans Kılavuzu SignalR
- SignalRAzure App Service için ASP.NET Core uygulaması yayımlama
Bu makalede, uygulamalarda bağlantıları yapılandırma ve yönetme işlemleri açıklanmaktadır SignalR Blazor .
ASP.NET Core yapılandırmaya ilişkin genel yönergeler için SignalR , ASP.NET Core giriş SignalR belgelerin alanındaki konulara bakın. SignalR Barındırılan bir Blazor WebAssembly çözüme eklenmişolarak yapılandırmak için bkz ASP.NET Core SignalR yapılandırmada ..
SignalRkimlik doğrulaması () için çıkış noktaları arası anlaşma Blazor WebAssembly
SignalRTemel alınan istemciyi, cookie s veya http kimlik doğrulama üstbilgileri gibi kimlik bilgilerini gönderecek şekilde yapılandırmak için:
SetBrowserRequestCredentialsKaynak noktaları arası isteklerde ayarlama yapmak için kullanın Include
fetch.IncludeRequestCredentialsMessageHandler.cs:using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Components.WebAssembly.Http; public class IncludeRequestCredentialsMessageHandler : DelegatingHandler { protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include); return base.SendAsync(request, cancellationToken); } }Hub bağlantısının oluşturulduğu yerde, HttpMessageHandler HttpMessageHandlerFactory seçeneğini seçeneğine atayın:
HubConnectionBuilder hubConnecton; ... hubConnecton = new HubConnectionBuilder() .WithUrl(new Uri(NavigationManager.ToAbsoluteUri("/chathub")), options => { options.HttpMessageHandlerFactory = innerHandler => new IncludeRequestCredentialsMessageHandler { InnerHandler = innerHandler }; }).Build();Yukarıdaki örnek, hub bağlantı URL 'sini konumundaki mutlak URI adresine yapılandırır
/chathub, bu URL, bileşendeki SignalR Blazor öğreticideIndex() birlikte kullanılırPages/Index.razor. URI, örneğinhttps://signalr.example.comveya yapılandırmayoluyla bir dize aracılığıyla da ayarlanabilir.
Daha fazla bilgi için bkz. ASP.NET Core SignalR yapılandırmada.
Oluşturma modu ( Blazor WebAssembly )
Kullanan bir Blazor WebAssembly uygulama SignalR sunucuda PreRender için yapılandırılmışsa, sunucuya istemci bağlantısı oluşturulmadan önce prerendering oluşur. Daha fazla bilgi için aşağıdaki makaleleri inceleyin:
- ASP.NET Core'de Bileşen Etiketi ASP.NET Core
- ASP.NET Core bileşenlerini önceden ASP.NET Core Razor ve tümleştirin
Uygulamalar için ek kaynaklar Blazor WebAssembly
Uygulamalar için devre işleyici seçenekleri Blazor Server
Blazor ServerDevresini CircuitOptions Aşağıdaki tabloda gösterilen ile yapılandırın.
| Seçenek | Varsayılan | Description |
|---|---|---|
| DetailedErrors | false |
Devre üzerinde işlenmeyen bir özel durum oluştuğunda veya JS birlikte çalışma yoluyla .NET yöntemi çağırma bir özel durumla sonuçlanırsa, JavaScript 'e ayrıntılı özel durum iletileri gönderin. |
| DisconnectedCircuitMaxRetained | 100 | Sunucunun aynı anda bellekte tuttuğu bağlantı kesilen bağlantı sayısı üst sınırı. |
| DisconnectedCircuitRetentionPeriod | 3 dakika | Bağlantısı kesilmiş bir devre dışı bırakılmadan önce bellekte tutulan en fazla süre. |
| JSInteropDefaultCallTimeout | 1 dakika | Zaman uyumsuz bir JavaScript işlev çağrısını zaman aşımına uğramadan önce sunucunun bekleyeceği en fazla süre. |
| MaxBufferedUnacknowledgedRenderBatches | 10 | En fazla bildirilmemiş işleme toplu işi sayısı sunucu, güçlü yeniden bağlanmayı desteklemek için belirli bir zamanda her bir devreye göre bellekte kalır. Sınıra ulaştıktan sonra sunucu, bir veya daha fazla toplu iş istemci tarafından onaylanana kadar yeni oluşturma toplu işleri oluşturmayı durduruyor. |
İçindeki seçenekleri Startup.ConfigureServices için bir seçenek temsilcisiyle yapılandırın AddServerSideBlazor . Aşağıdaki örnek, önceki tabloda gösterilen varsayılan seçenek değerlerini atar. ' Nin Startup.cs System () ad alanını kullandığını doğrulayın using System; .
Startup.ConfigureServices:
services.AddServerSideBlazor(options =>
{
options.DetailedErrors = false;
options.DisconnectedCircuitMaxRetained = 100;
options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(3);
options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(1);
options.MaxBufferedUnacknowledgedRenderBatches = 10;
});
Yapılandırmak için HubConnectionContext HubConnectionContextOptions ile kullanın AddHubOptions . Seçenek açıklamaları için bkz ASP.NET Core SignalR yapılandırmada .. Aşağıdaki örnek, varsayılan seçenek değerlerini atar. ' Nin Startup.cs System () ad alanını kullandığını doğrulayın using System; .
Startup.ConfigureServices:
services.AddServerSideBlazor()
.AddHubOptions(options =>
{
options.ClientTimeoutInterval = TimeSpan.FromSeconds(30);
options.EnableDetailedErrors = false;
options.HandshakeTimeout = TimeSpan.FromSeconds(15);
options.KeepAliveInterval = TimeSpan.FromSeconds(15);
options.MaximumParallelInvocationsPerClient = 1;
options.MaximumReceiveMessageSize = 32 * 1024;
options.StreamBufferCapacity = 10;
});
Blazor Hub Endpoint Route yapılandırması ( Blazor Server )
' De, Startup.Configure Blazor Server Uygulamaları MapBlazorHub IEndpointRouteBuilder UseEndpoints Blazor Hub uygulamanın varsayılan yoluyla eşlemek için ' nda ' i çağırır. Blazor ServerBetik ( blazor.server.js ) tarafından oluşturulan uç noktayı otomatik olarak gösterir MapBlazorHub .
kullanıcı arabirimindeki bağlantı durumunu Düşünce Yansıması ( Blazor Server )
İstemci bağlantının kaybolduğunu algıladığında, istemci yeniden bağlanmayı denediğinde kullanıcıya varsayılan bir kullanıcı arabirimi görüntülenir. Yeniden bağlantı başarısız olursa, kullanıcıya yeniden deneme seçeneği sağlanır.
Kullanıcı arabirimini özelleştirmek için, sayfanın içindeki öğesiyle bir öğe id tanımlayın components-reconnect-modal <body> _Host.cshtml Razor .
Pages/_Host.cshtml:
<div id="components-reconnect-modal">
...
</div>
Aşağıdaki CSS stillerini sitenin stil sayfasına ekleyin.
wwwroot/css/site.css:
#components-reconnect-modal {
display: none;
}
#components-reconnect-modal.components-reconnect-show {
display: block;
}
Aşağıdaki tabloda Framework tarafından öğesine uygulanan CSS sınıfları açıklanmaktadır components-reconnect-modal Blazor .
| CSS sınıfı | Bildiren… |
|---|---|
components-reconnect-show |
Kayıp bir bağlantı. İstemci yeniden bağlanmaya çalışıyor. Kalıcı olarak göster. |
components-reconnect-hide |
Etkin bir bağlantı sunucuya yeniden oluşturulur. Kalıcı olarak gizleyin. |
components-reconnect-failed |
Muhtemelen bir ağ hatasından dolayı yeniden bağlantı başarısız oldu. Yeniden bağlanmayı denemek için window.Blazor.reconnect() JavaScript içinde çağırın. |
components-reconnect-rejected |
Yeniden bağlantı reddedildi. Sunucuya ulaşıldı ancak bağlantı reddedildi ve kullanıcının sunucudaki durumu kayboldu. Uygulamayı yeniden yüklemek için location.reload() JavaScript içinde çağırın. Bu bağlantı durumu şu durumlarda oluşabilir:
|
Oluşturma modu ( Blazor Server )
Varsayılan olarak, Blazor Server uygulamalar sunucuya istemci bağlantısı oluşturulmadan önce sunucudaki kullanıcı arabirimini alır. Daha fazla bilgi için bkz. ASP.NET Core'de Bileşen Etiketi ASP.NET Core.
Blazor başlangıç ( Blazor Server )
Blazor ServerDosyada uygulamanın SignalR devresine el ile başlangıcını yapılandırın Pages/_Host.cshtml :
autostart="false"Betiğin etiketine bir öznitelik ekleyin<script>blazor.server.js.Blazor.startblazor.server.jsKomut dosyasının<script>etiketinden ve kapanış etiketinin içindeyken çağıran bir betik yerleştirin</body>.
autostartDevre dışı bırakıldığında, devresine bağımlı olmayan uygulamanın herhangi bir yönü normal şekilde çalışır. Örneğin, istemci tarafı yönlendirme çalışır durumdadır. Ancak, bağlantı hattına bağlı olan tüm yönleri çağrılana kadar Blazor.start çalışır durumda değildir. Uygulama davranışı, önceden kurulmuş bir bağlantı hattı olmadan tahmin edilemez. Örneğin, bağlantı hattı bağlantısı kesildiğinde bileşen yöntemleri yürütülenemz.
Belge hazır olduğunda başlatma ve JS Promise'e zincirleme dahil olmak üzere daha fazla Blazor bilgi içinbkz. ASP.NET Core Blazor Başlangıç .
İstemci SignalR günlüğünü yapılandırma ( Blazor Server )
İstemci oluşturucuda, günlük configureSignalR düzeyiyle çağıran configureLogging yapılandırma nesnesini iletir.
Pages/_Host.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
configureSignalR: function (builder) {
builder.configureLogging("information");
}
});
</script>
</body>
Yukarıdaki örnekte, information günlük düzeyine LogLevel.Information eşdeğerdir.
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Yeniden bağlantı işleyicisini değiştirme ( Blazor Server )
Yeniden bağlanma işleyicinin bağlantı hattı bağlantı olayları, aşağıdakiler gibi özel davranışlar için değiştirilebilir:
- Bağlantının bırakılırsa kullanıcıya bildirme.
- Bağlantı hattı bağlandığında günlüğe kaydetme (istemciden) gerçekleştirmek için.
Bağlantı olaylarını değiştirmek için, aşağıdaki bağlantı değişiklikleri için geri çağırmaları kaydedin:
- Bırakılan bağlantılar
onConnectionDownkullanır. - Kurulan/yeniden kurulan bağlantılar
onConnectionUpkullanır.
Hem onConnectionDown hem onConnectionUp de belirtilmelidir.
Pages/_Host.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
reconnectionHandler: {
onConnectionDown: (options, error) => console.error(error),
onConnectionUp: () => console.log("Up, up, and away!")
}
});
</script>
</body>
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Yeniden bağlanma yeniden deneme sayısını ve aralığını ( Blazor Server ) ayarlayın
Yeniden bağlanma yeniden deneme sayısını ve aralığını ayarlamak için, her yeniden deneme girişimi için izin verilen yeniden deneme sayısını ( ) ve dönemi milisaniye maxRetries cinsinden ayarlayın retryIntervalMilliseconds ( ).
Pages/_Host.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
reconnectionOptions: {
maxRetries: 3,
retryIntervalMilliseconds: 2000
}
});
</script>
</body>
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Yeniden bağlantı görüntülemesini gizleme veya değiştirme ( Blazor Server )
Yeniden bağlantı görüntülemesini gizlemek için yeniden bağlantı işleyicisini boş bir _reconnectionDisplay nesneye ( veya ) {} new Object() ayarlayın.
Pages/_Host.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
window.addEventListener('beforeunload', function () {
Blazor.defaultReconnectionHandler._reconnectionDisplay = {};
});
Blazor.start();
</script>
</body>
Yeniden bağlantı görüntülemesini değiştirmek için, _reconnectionDisplay önceki örnekte öğesini görüntüleme öğesine ayarlayın:
Blazor.defaultReconnectionHandler._reconnectionDisplay =
document.getElementById("{ELEMENT ID}");
Yer {ELEMENT ID} tutucu, görüntülemek istediğiniz HTML öğesinin kimliğidir.
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Kalıcı öğe için sitenin CSS'sinde özelliğini ayarerek yeniden bağlantı transition-delay görüntüsü görüntülenmeden önceki gecikmeyi özelleştirin. Aşağıdaki örnek, 500 ms 'den (varsayılan) geçiş gecikmesi 1.000 ms'ye (1 saniye) ayarlar.
wwwroot/css/site.css:
#components-reconnect-modal {
transition: visibility 0s linear 1000ms;
}
Bağlantı Blazor hattıyla istemcinin bağlantısını kesme ( Blazor Server )
Sayfa olayı Blazor tetiklendiğinde bağlantı hattı unload varsayılan olarak kesilir. İstemcide diğer senaryolar için bağlantı hattı bağlantısını kesmek için uygun Blazor.disconnect olay işleyicisinde çağırın. Aşağıdaki örnekte, sayfa gizli olduğunda bağlantı hattı kesiliyor ( pagehide olay):
window.addEventListener('pagehide', () => {
Blazor.disconnect();
});
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Blazor Server devre işleyicisi
Blazor Server , kodun bir bağlantı hattı işleyicisi tanımlamasını sağlar ve bu da kullanıcının bağlantı hattı durumuna yapılan değişikliklerde kod çalıştırmaya olanak sağlar. Bağlantı hattı işleyicisi, sınıfından CircuitHandler türeterek ve uygulamanın hizmet kapsayıcısı içinde kaydederek uygulanır. Aşağıdaki bağlantı hattı işleyicisi örneği açık bağlantıları SignalR izler.
TrackingCircuitHandler.cs:
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.Server.Circuits;
public class TrackingCircuitHandler : CircuitHandler
{
private HashSet<Circuit> circuits = new();
public override Task OnConnectionUpAsync(Circuit circuit,
CancellationToken cancellationToken)
{
circuits.Add(circuit);
return Task.CompletedTask;
}
public override Task OnConnectionDownAsync(Circuit circuit,
CancellationToken cancellationToken)
{
circuits.Remove(circuit);
return Task.CompletedTask;
}
public int ConnectedCircuits => circuits.Count;
}
Bağlantı hattı işleyicileri DI kullanılarak kaydedilir. Kapsamlı örnekler, bağlantı hattı örneği başına oluşturulur. Önceki örnekte kullanılarak tek bir hizmet oluşturulur çünkü tüm TrackingCircuitHandler bağlantı hatlarının durumu iz gerekir.
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<CircuitHandler, TrackingCircuitHandler>();
}
Özel bağlantı hattı işleyicinin yöntemleri işsiz bir özel durum oluşturursa, özel durum bağlantı hattı için önemli Blazor Server olur. bir işleyicinin kodunda veya çağrılı yöntemlerde özel durumları tolere etmek için, kodu hata işleme ve günlüğe kaydetme ile bir veya try-catch daha fazla deyimde sarmalar.
Bir kullanıcının bağlantısı kesildiğinde ve çerçeve devre durumunu temizlediğinde, çerçeve devrenin DI kapsamını atıyor. Kapsamın atılması, uygulayan tüm bağlantı hattı kapsamlı DI hizmetlerini System.IDisposable atlar. Herhangi bir DI hizmeti atma sırasında işlanmamış bir özel durum oluşturursa, çerçeve özel durumu günlüğe kaydeder.
Azure SignalR Hizmeti ( Blazor Server )
SignalR Microsoft Azure'da barındırılan uygulamalar için Azure Blazor Server Hizmeti'Microsoft Azure. Hizmet, bir uygulamanın ölçeğini çok sayıda eş zamanlı bağlantıya ölçeklendirmek için Blazor uygulamanın Hub'ı Blazor Server ile birlikte SignalR çalışır. Ayrıca hizmetin küresel erişim ve yüksek performanslı veri merkezleri, coğrafya nedeniyle gecikme süresinin SignalR azaltılmasına önemli ölçüde yardımcı olur. Azure Hizmeti'ne ön işlem desteği SignalR için uygulamayı yapışkan oturumlar kullanmak üzere yapılandırabilirsiniz. Daha fazla bilgi için bkz. ASP.NET Core barındırma ve dağıtma Blazor Server.
Uygulamalar için ek Blazor Server kaynaklar
- ASP.NET Core giriş SignalR
- ASP.NET Core SignalR yapılandırmada
- Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server
- Blazor Server yeniden bağlanma olayları ve bileşen yaşam döngüsü olayları
- Azure Hizmeti SignalR nedir?
- Azure Hizmeti için performans SignalR kılavuzu
- SignalRAzure App Service için ASP.NET Core uygulaması yayımlama
Bu makalede uygulamalarda bağlantıları yapılandırma ve SignalR Blazor yönetme açıklanmıştır.
Yapılandırmayla ilgili ASP.NET Core SignalR için belgelerin alanında yer ASP.NET Core giriş SignalR alan konulara bakın. Barındırılan SignalR bir çözüme eklenenleri yapılandırmak Blazor WebAssembly içinbkz. ASP.NET Core SignalR yapılandırmada .
SignalR kimlik doğrulaması için çıkış noktası arası anlaşma ( Blazor WebAssembly )
'nin SignalR temel istemcisini s veya HTTP kimlik doğrulaması üst bilgileri gibi cookie kimlik bilgilerini gönderecek şekilde yapılandırmak için:
Çıkış SetBrowserRequestCredentials noktası arası Include isteklerde ayarlamak için
fetchkullanın.IncludeRequestCredentialsMessageHandler.cs:using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Components.WebAssembly.Http; public class IncludeRequestCredentialsMessageHandler : DelegatingHandler { protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include); return base.SendAsync(request, cancellationToken); } }Hub bağlantısının yerleşik olduğu yerde seçeneğini HttpMessageHandler HttpMessageHandlerFactory attayabilirsiniz:
HubConnectionBuilder hubConnecton; ... hubConnecton = new HubConnectionBuilder() .WithUrl(new Uri(NavigationManager.ToAbsoluteUri("/chathub")), options => { options.HttpMessageHandlerFactory = innerHandler => new IncludeRequestCredentialsMessageHandler { InnerHandler = innerHandler }; }).Build();Yukarıdaki örnek, hub bağlantı URL'sini ' de mutlak URI adresine yapılandırıyor. Bu, bileşeninde öğretici ile kullanılan
/chathubSignalR BlazorIndexURL' dir (Pages/Index.razor). URI, örneğin , veya yapılandırması aracılığıyla bir dizehttps://signalr.example.comaracılığıyla da ayarlanır.
Daha fazla bilgi için bkz. ASP.NET Core SignalR yapılandırmada.
Uygulamalar için ek Blazor WebAssembly kaynaklar
Uygulamalar için devre Blazor Server işleyicisi seçenekleri
Bağlantı hattı Blazor Server aşağıdaki tabloda gösterilen ile CircuitOptions yapılandırılır.
| Seçenek | Varsayılan | Description |
|---|---|---|
| DetailedErrors | false |
Bağlantı hattında işlanmamış bir özel durum oluştuğunda veya JS birlikte çalışma yoluyla bir .NET yöntemi çağrılsa bir özel durumla sonuçlandı ise JavaScript'e ayrıntılı özel durum iletileri gönderin. |
| DisconnectedCircuitMaxRetained | 100 | Sunucunun aynı anda bellekte yer alan bağlantısız bağlantı hattı sayısı üst sayısı. |
| DisconnectedCircuitRetentionPeriod | 3 dakika | Bağlantısı kesilmiş bir bağlantı hattı kapatılana kadar bellekte tutulacak maksimum süre. |
| JSInteropDefaultCallTimeout | 1 dakika | Zaman uyumsuz bir JavaScript işlevi çağrılmadan önce sunucunun bekleyeceği en uzun süre. |
| MaxBufferedUnacknowledgedRenderBatches | 10 | Sağlam yeniden bağlanmayı desteklemek için sunucunun belirli bir zamanda bağlantı hattı başına bellekte tutarken en fazla bilgisiz işleme toplu işi sayısı. Sınıra ulaştıktan sonra, istemci tarafından bir veya daha fazla toplu iş onay gelene kadar sunucu yeni işleme toplu işleri üretmeyi durdurur. |
içinde seçenekleri, için Startup.ConfigureServices temsilci olarak bir seçenekle yapılandırabilirsiniz. AddServerSideBlazor Aşağıdaki örnek, önceki tabloda gösterilen varsayılan seçenek değerlerini atar. ad alanını Startup.cs () System kullandığını using System; onaylayın.
Startup.ConfigureServices:
services.AddServerSideBlazor(options =>
{
options.DetailedErrors = false;
options.DisconnectedCircuitMaxRetained = 100;
options.DisconnectedCircuitRetentionPeriod = TimeSpan.FromMinutes(3);
options.JSInteropDefaultCallTimeout = TimeSpan.FromMinutes(1);
options.MaxBufferedUnacknowledgedRenderBatches = 10;
});
'yi yapılandırmak HubConnectionContext için ile HubConnectionContextOptions AddHubOptions kullanın. Seçenek açıklamaları için ASP.NET Core SignalR yapılandırmada bkz. . Aşağıdaki örnek varsayılan seçenek değerlerini atar. ad alanını Startup.cs () System kullandığını using System; onaylayın.
Startup.ConfigureServices:
services.AddServerSideBlazor()
.AddHubOptions(options =>
{
options.ClientTimeoutInterval = TimeSpan.FromSeconds(30);
options.EnableDetailedErrors = false;
options.HandshakeTimeout = TimeSpan.FromSeconds(15);
options.KeepAliveInterval = TimeSpan.FromSeconds(15);
options.MaximumParallelInvocationsPerClient = 1;
options.MaximumReceiveMessageSize = 32 * 1024;
options.StreamBufferCapacity = 10;
});
Blazor Hub uç noktası rota yapılandırması ( Blazor Server )
uygulamasında, Startup.Configure Blazor Server MapBlazorHub uygulamanın varsayılan yoluna eşlemek için üzerinde uygulamalar IEndpointRouteBuilder UseEndpoints Blazor Hub çağrısı kullanır. Betik Blazor Server ( ) tarafından oluşturulan uç noktayı otomatik olarak blazor.server.js MapBlazorHub belirtir.
Düşünce Yansıması arabiriminde bağlantı durumunu seçin ( Blazor Server )
İstemci bağlantının kayıp olduğunu algılasa, istemci yeniden bağlanmaya çalışırken kullanıcıya varsayılan bir kullanıcı arabirimi görüntülenir. Yeniden bağlantı başarısız olursa kullanıcıya yeniden deneme seçeneği sağlanır.
Kullanıcı arabirimini özelleştirmek için, sayfanın içinde ile id components-reconnect-modal bir öğesi <body> _Host.cshtml Razor tanımlayın.
Pages/_Host.cshtml:
<div id="components-reconnect-modal">
...
</div>
Sitenin stil sayfası için aşağıdaki CSS stillerini ekleyin.
wwwroot/css/site.css:
#components-reconnect-modal {
display: none;
}
#components-reconnect-modal.components-reconnect-show {
display: block;
}
Aşağıdaki tabloda, çerçeve tarafından öğesine uygulanan CSS components-reconnect-modal sınıfları Blazor açıkmektedir.
| CSS sınıfı | Gösterir… |
|---|---|
components-reconnect-show |
Bağlantının kaybedildi. İstemci yeniden bağlanmaya çalışıyor. Kalıcıyı gösterir. |
components-reconnect-hide |
Sunucuyla etkin bir bağlantı yeniden kurulur. Kalıcı pencereyi gizleyin. |
components-reconnect-failed |
Büyük olasılıkla bir ağ hatası nedeniyle yeniden bağlantı başarısız oldu. Yeniden bağlanmayı denemeniz için window.Blazor.reconnect() JavaScript'te çağrısı kullanın. |
components-reconnect-rejected |
Yeniden bağlantı reddedildi. Sunucuya ulaşıldı ancak bağlantı reddedildi ve kullanıcının sunucu durumu kayboldu. Uygulamayı yeniden yüklemek için location.reload() JavaScript'te çağrısı kullanın. Bu bağlantı durumu şu durumla sonuçlanabilirsiniz:
|
İşleme modu ( Blazor Server )
Varsayılan Blazor Server olarak, uygulamalar sunucuyla istemci bağlantısı kurulmadan önce kullanıcı arabirimini önceden ayarlar. Daha fazla bilgi için bkz. ASP.NET Core'de Bileşen Etiketi ASP.NET Core.
Blazor startup ( Blazor Server )
Dosyada uygulamanın Blazor Server devresini el SignalR ile başlatmayı Pages/_Host.cshtml yapılandırma:
autostart="false"Betiğin<script>etiketine bir öznitelikblazor.server.jsekleyin.- Betiğin etiketinin
Blazor.startardından veblazor.server.jskapanış etiketinin içine<script>çağıran bir betik</body>ekleyin.
Devre autostart dışı bırakılmıştır, uygulamanın bağlantı hattına bağımlı olmayan tüm yönleri normal şekilde çalışır. Örneğin, istemci tarafı yönlendirme çalışır durumdadır. Ancak, bağlantı hattına bağlı olan tüm yönleri çağrılana kadar Blazor.start çalışır durumda değildir. Uygulama davranışı, önceden kurulmuş bir bağlantı hattı olmadan tahmin edilemez. Örneğin, bağlantı hattı bağlantısı kesildiğinde bileşen yöntemleri yürütülenemz.
Belge hazır olduğunda başlatma ve JS Promise'e zincirleme dahil olmak üzere daha fazla Blazor bilgi içinbkz. ASP.NET Core Blazor Başlangıç .
İstemci SignalR günlüğünü yapılandırma ( Blazor Server )
İstemci oluşturucuda, günlük configureSignalR düzeyiyle çağıran configureLogging yapılandırma nesnesini iletir.
Pages/_Host.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
configureSignalR: function (builder) {
builder.configureLogging("information");
}
});
</script>
</body>
Yukarıdaki örnekte, information günlük düzeyine LogLevel.Information eşdeğerdir.
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Yeniden bağlantı işleyicisini değiştirme ( Blazor Server )
Yeniden bağlanma işleyicinin bağlantı hattı bağlantı olayları, aşağıdakiler gibi özel davranışlar için değiştirilebilir:
- Bağlantının bırakılırsa kullanıcıya bildirme.
- Bağlantı hattı bağlandığında günlüğe kaydetme (istemciden) gerçekleştirmek için.
Bağlantı olaylarını değiştirmek için, aşağıdaki bağlantı değişiklikleri için geri çağırmaları kaydedin:
- Bırakılan bağlantılar
onConnectionDownkullanır. - Kurulan/yeniden kurulan bağlantılar
onConnectionUpkullanır.
Hem onConnectionDown hem onConnectionUp de belirtilmelidir.
Pages/_Host.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
reconnectionHandler: {
onConnectionDown: (options, error) => console.error(error),
onConnectionUp: () => console.log("Up, up, and away!")
}
});
</script>
</body>
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Yeniden bağlanma yeniden deneme sayısını ve aralığını ( Blazor Server ) ayarlayın
Yeniden bağlanma yeniden deneme sayısını ve aralığını ayarlamak için, her yeniden deneme girişimi için izin verilen yeniden deneme sayısını ( ) ve dönemi milisaniye maxRetries cinsinden ayarlayın retryIntervalMilliseconds ( ).
Pages/_Host.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
Blazor.start({
reconnectionOptions: {
maxRetries: 3,
retryIntervalMilliseconds: 2000
}
});
</script>
</body>
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Yeniden bağlantı ekranı gizleme veya değiştirme ( Blazor Server )
Yeniden bağlantı görüntülemesini gizlemek için yeniden bağlantı işleyicisini boş bir _reconnectionDisplay nesneye ( veya ) {} new Object() ayarlayın.
Pages/_Host.cshtml:
<body>
...
<script src="_framework/blazor.server.js" autostart="false"></script>
<script>
window.addEventListener('beforeunload', function () {
Blazor.defaultReconnectionHandler._reconnectionDisplay = {};
});
Blazor.start();
</script>
</body>
Yeniden bağlantı görüntülemesini değiştirmek için, _reconnectionDisplay önceki örnekte öğesini görüntüleme öğesine ayarlayın:
Blazor.defaultReconnectionHandler._reconnectionDisplay =
document.getElementById("{ELEMENT ID}");
Yer {ELEMENT ID} tutucu, görüntülemek istediğiniz HTML öğesinin kimliğidir.
Başlatma hakkında daha fazla Blazor bilgi için ASP.NET Core Blazor Başlangıç bkz. .
Blazor Server devre işleyicisi
Blazor Server , kodun bir bağlantı hattı işleyicisi tanımlamasını sağlar ve bu da kullanıcının bağlantı hattı durumuna yapılan değişikliklerde kod çalıştırmaya olanak sağlar. Bağlantı hattı işleyicisi, sınıfından CircuitHandler türeterek ve uygulamanın hizmet kapsayıcısı içinde kaydederek uygulanır. Aşağıdaki bağlantı hattı işleyicisi örneği açık bağlantıları SignalR izler.
TrackingCircuitHandler.cs:
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components.Server.Circuits;
public class TrackingCircuitHandler : CircuitHandler
{
private HashSet<Circuit> circuits = new HashSet<Circuit>();
public override Task OnConnectionUpAsync(Circuit circuit,
CancellationToken cancellationToken)
{
circuits.Add(circuit);
return Task.CompletedTask;
}
public override Task OnConnectionDownAsync(Circuit circuit,
CancellationToken cancellationToken)
{
circuits.Remove(circuit);
return Task.CompletedTask;
}
public int ConnectedCircuits => circuits.Count;
}
Bağlantı hattı işleyicileri DI kullanılarak kaydedilir. Kapsamlı örnekler, bağlantı hattı örneği başına oluşturulur. Önceki örnekte kullanılarak tek bir hizmet oluşturulur çünkü tüm TrackingCircuitHandler bağlantı hatlarının durumu iz gerekir.
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<CircuitHandler, TrackingCircuitHandler>();
}
Özel bağlantı hattı işleyicinin yöntemleri işsiz bir özel durum oluşturursa, özel durum bağlantı hattı için önemli Blazor Server olur. Bir işleyicinin kodunda veya çağrılan yöntemlerde özel durumları tolere etmek için, kodu hata işleme ve günlüğe kaydetme ile bir veya try-catch daha fazla deyimde sarmalar.
Bir kullanıcının bağlantısı kesildiğinde ve çerçeve devre durumunu temizlediğinde, çerçeve devrenin DI kapsamını atıyor. Kapsamın atılması, uygulayan tüm bağlantı hattı kapsamlı DI hizmetlerini System.IDisposable atlar. Herhangi bir DI hizmeti atma sırasında işlanmamış bir özel durum oluşturursa, çerçeve özel durumu günlüğe kaydeder.
Azure SignalR Hizmeti ( Blazor Server )
SignalR Microsoft Azure'da barındırılan uygulamalar için Azure Blazor Server Hizmeti'Microsoft Azure. Hizmet, bir uygulamanın ölçeğini çok sayıda eş zamanlı bağlantıya ölçeklendirmek için Blazor uygulamanın Hub'ı Blazor Server ile birlikte SignalR çalışır. Ayrıca hizmetin küresel erişim ve yüksek performanslı veri merkezleri, coğrafya nedeniyle gecikme süresinin SignalR azaltılmasına önemli ölçüde yardımcı olur. Azure Hizmeti'ne önceden işlem desteği SignalR için uygulamayı yapışkan oturumlar kullanmak üzere yapılandırabilirsiniz. Daha fazla bilgi için bkz. ASP.NET Core barındırma ve dağıtma Blazor Server.
Uygulamalar için ek Blazor Server kaynaklar
- ASP.NET Core giriş SignalR
- ASP.NET Core SignalR yapılandırmada
- Güvenlik açıkları için tehdit azaltma ASP.NET Core Blazor Server
- Blazor Server yeniden bağlanma olayları ve bileşen yaşam döngüsü olayları
- Azure Hizmeti SignalR nedir?
- Azure Hizmeti için performans SignalR kılavuzu
- SignalRAzure App Service için ASP.NET Core uygulaması yayımlama