zoukankan      html  css  js  c++  java
  • 使用Blazor Server 线路处理程序 (circuit handler)跟踪打开的SignalR连接

    Blazor服务器允许定义线路处理程序(circuit handler)代码,该处理程序(handler)允许在更改用户线路状态时运行此代码。 线路处理程序(circuit handler)是通过从CircuitHandler类派生并在应用程序的服务容器中注册该类来实现的。

    以下线路处理程序(circuit handler)示例跟踪打开的SignalR连接:

     1 using System.Collections.Generic;
     2 using System.Threading;
     3 using System.Threading.Tasks;
     4 using Microsoft.AspNetCore.Components.Server.Circuits;
     5 
     6 public class TrackingCircuitHandler : CircuitHandler
     7 {
     8     private HashSet<Circuit> _circuits = new HashSet<Circuit>();
     9 
    10     public override Task OnConnectionUpAsync(Circuit circuit, 
    11         CancellationToken cancellationToken)
    12     {
    13         _circuits.Add(circuit);
    14 
    15         return Task.CompletedTask;
    16     }
    17 
    18     public override Task OnConnectionDownAsync(Circuit circuit, 
    19         CancellationToken cancellationToken)
    20     {
    21         _circuits.Remove(circuit);
    22 
    23         return Task.CompletedTask;
    24     }
    25 
    26     public int ConnectedCircuits => _circuits.Count;
    27 }

    线路处理程序使用DI (依赖注入) 注册。 每个线路实例都会创建作用域实例。 在前面的示例中使用TrackingCircuitHandler来创建单例服务,因为必须跟踪所有电路的状态:

    1 public void ConfigureServices(IServiceCollection services)
    2 {
    3     ...
    4     services.AddSingleton<CircuitHandler, TrackingCircuitHandler>();
    5 }

    如果自定义线路处理程序(circuit handler)的方法抛出未处理的异常,则该异常对于Blazor Server线路是致命的。 要容忍处理程序代码或被调用方法中的异常,请使用错误处理和日志记录将代码包装在一个或多个try-catch语句中。

    当由于用户断开连接而线路结束并且框架正在清除线路状态时,框架将处理线路的DI(依赖注入)范围。 处置范围处置任何实现System.IDisposable的线路范围的DI服务。 如果有任何DI服务在处理期间引发未处理的异常,则框架记录该异常。

  • 相关阅读:
    框架:Java-Spring Cloud
    DB-数据库:百科
    公司-风险投资公司-软银银行集团:百科
    百科-Java-API:POI
    组织:基金会
    un-解决方案-MSP(管理服务提供商):百科
    汉语-词语:金融
    DBS-MySQL:MYSQL获取自增ID的四种方法
    linux框架之ibus
    jQuery+CSS 简单代码实现遮罩层( 兼容主流浏览器 )
  • 原文地址:https://www.cnblogs.com/bisslot/p/12435768.html
Copyright © 2011-2022 走看看