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服务在处理期间引发未处理的异常,则框架记录该异常。

  • 相关阅读:
    用DecimalFormat格式化十进制数字的实际应用
    ETL测试小结
    浅谈DB2的四个隔离级别
    POI处理Excel中各种日期格式问题
    如何将Object类型转换成String类型
    ArrayList和LinkedList
    DB2 编目并访问远程数据库
    EXCEL解析之终极方法WorkbookFactory
    DB2中coalesce函数的应用
    【Linux学习】Linux用户管理2—用户配置文件
  • 原文地址:https://www.cnblogs.com/bisslot/p/12435768.html
Copyright © 2011-2022 走看看