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 fetch kullanı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 /chathub SignalR Blazor Index URL' dir ( Pages/Index.razor ). URI, örneğin , veya yapılandırması aracılığıyla bir dize https://signalr.example.com aracı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:

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:
  • Sunucu tarafı bağlantı hattında bir kilitlenme oluşur.
  • Sunucunun kullanıcının durumunu bırakması için istemcinin bağlantısı yeterince uzundur. Kullanıcının bileşenlerinin örnekleri atıldı.
  • Sunucu yeniden başlatılır veya uygulamanın çalışan işlemi geri dönüştürüler.

İş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 öznitelik blazor.server.js ekleyin.
  • Betiğin etiketinin Blazor.start ardından ve blazor.server.js kapanış 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 onConnectionDown kullanır.
  • Kurulan/yeniden kurulan bağlantılar onConnectionUp kullanı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

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 öğreticide Index () birlikte kullanılır Pages/Index.razor . URI, örneğin https://signalr.example.com veya 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:

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:
  • Sunucu tarafında devre dışı bir kilitlenme oluşur.
  • Sunucunun kullanıcının durumunu bırakması için istemcinin bağlantısı yeterince uzun değil. Kullanıcı bileşenlerinin örnekleri atıldı.
  • Sunucu yeniden başlatıldı veya uygulamanın çalışan işlemi geri dönüştürüldü.

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.start blazor.server.js Komut 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 onConnectionDown kullanır.
  • Kurulan/yeniden kurulan bağlantılar onConnectionUp kullanı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

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 fetch kullanı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 /chathub SignalR Blazor Index URL' dir ( Pages/Index.razor ). URI, örneğin , veya yapılandırması aracılığıyla bir dize https://signalr.example.com aracı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:
  • Sunucu tarafı bağlantı hattında bir kilitlenme oluşur.
  • Sunucunun kullanıcının durumunu bırakması için istemcinin bağlantısı yeterince uzundur. Kullanıcının bileşenlerinin örnekleri atıldı.
  • Sunucu yeniden başlatılır veya uygulamanın çalışan işlemi geri dönüştürüler.

İş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 öznitelik blazor.server.js ekleyin.
  • Betiğin etiketinin Blazor.start ardından ve blazor.server.js kapanış 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 onConnectionDown kullanır.
  • Kurulan/yeniden kurulan bağlantılar onConnectionUp kullanı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