SignalR for ASP.Net Core 是 SignalR 的浴火重生版,允许你在 ASP.Net Core 中实现实时通讯,这里的 实时 意味着双方都能快速的感知对方发来的消息,比如:一旦 server 端有需要推送的内容将会直接 push 到 client,这和原始的 http 单向请求有着本质的区别。

值得注意的是, ASP.Net Core 版的 SingalR 移除了老版的诸多功能,比如:

  • 自动重连机制

  • 消息处理机制

  • 单连接多hub

不过无需担心,新版的 SingalR 在健壮性和易用性上做了非常大的改进,总的来说,新版本已不兼容老版本,而且新的 SingalR 客户端采用的是 TypeScript 。

安装 SingalR

要想使用 SingalR,需要通过 nuget 引用 Microsoft.AspNetCore.SignalR 包,可以通过 Visual Studio 2019 的 NuGet package manager 可视化界面安装 或者 通过 NuGet package manager 命令行工具输入以下命令:


Install-Package Microsoft.AspNetCore.SignalR

使用 SignalR broadcast

现在我们一起实现一下如何在 ASP.Net Core 应用程序中使用 SignalR 的广播消息,那怎么做呢?创建一个自定义的 MessageHub 类并继承类库中的 Hub 基类,在 MessageHub 中定义一个 SendMessage 方法,该方法用于向所有已连接的客户端发送消息,如下代码所示:

public class MessageHub : Hub{public async Task SendMessage(string user, string message){await Clients.All.SendAsync("ReceiveMessage", user, message);}}

配置 SignalR

要想在 ASP.Net Core 中使用 SignalR,只需在 Startup.ConfigureServices() 中调用扩展方法 AddSignalR() 将其注入到 ServiceCollection 中即可,如下代码所示:

public class Startup{public Startup(IConfiguration configuration){Configuration = configuration;}public IConfiguration Configuration { get; }// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){services.AddSignalR();services.AddControllersWithViews();}}

为了能够启用 MessageHub,需要在 Startup.Configure 方法中添加如下代码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseEndpoints(endpoints =>{endpoints.MapControllerRoute(name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");endpoints.MapHub<MessageHub>("/messagehub");});}

创建 SignalR client

SignalR 的 client 是任意的,意味着它可以是 html, windowform, wpf,console 甚至是 java 程序,它们都可以消费 server 端发来的消息,接下来准备创建一个 Console 程序尝试一下,那如何做呢?需要在 client 端引用 Microsoft.AspNetCore.SignalR.ClientSystem.Text.Encodings.Web 两个nuget包,如下代码所示:

class Program{static async Task Main(string[] args){HubConnection connection = new HubConnectionBuilder().WithUrl("http://localhost:55215/messagehub").Build();connection.On<string, string>("ReceiveMessage", (user, message) =>{var newMessage = $"{user}: {message}";Console.WriteLine(newMessage);});await connection.StartAsync();await connection.InvokeAsync("SendMessage", "jack", "hello,world");Console.ReadLine();}}

接下来就可以调试一下,分别启动 server 和 client 端,如下图所示:

server

client

译文链接:https://www.infoworld.com/article/3267165/how-to-use-signalr-in-aspnet-core.html

如何在 ASP.Net Core 中使用 SignalR相关推荐

  1. 如何在ASP.NET Core中使用SignalR构建与Angular通信的实时通信应用程序

    图片 假设我们要创建一个监视Web应用程序,该应用程序为用户提供了一个能够显示一系列信息的仪表板,这些信息会随着时间的推移而更新. 第一种方法是在定义的时间间隔(轮询)定期调用API 以更新仪表板上的 ...

  2. 如何在 ASP.NET Core 中使用 HttpClientFactory ?

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...

  3. 如何在 ASP.Net Core 中使用 Autofac

    依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...

  4. 如何在 ASP.Net Core 中使用 Lamar

    ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和 ...

  5. 如何在 ASP.Net Core 中使用 MediatR

    MediatR 是一个 中介者模式 的.NET开源实现, 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖,在 中介者模式 中,一个对象不需要直接和另一个对象进行通讯, ...

  6. 如何在 ASP.Net Core 中对接 WCF

    在 REST API 出现之前,SOAP (Simple Object Access Protocol) 一直都是基于 web 的标准协议,虽然现在 REST 大行其道,但在平时开发中总会遇到对接第三 ...

  7. 如何在 ASP.Net Core 中使用 NCache

    虽然 ASP.Net Core 中缺少 Cache 对象,但它引入了三种不同的cache方式. 内存缓存 分布式缓存 Response缓存 Alachisoft 公司提供了一个开源项目 NCache, ...

  8. 如何在 ASP.Net Core 中使用 Configuration Provider

    ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v 的形式存储,值得注意的是,新的数据配 ...

  9. 如何在 ASP.Net Core 中使用 Serilog

    记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...

最新文章

  1. java面试题二十六 多线程考题
  2. java接口常见问题分析_常见问题 - Apache ServiceComb
  3. kali linux 升级命令_作为高级Java,你应该了解的Linux知识
  4. margin系列之负值
  5. mysql 冗余字段_18.3.3 增加冗余字段
  6. unity下载及安装
  7. ubuntu17.04 UHD 驱动出错
  8. 理解雅可比矩阵和海森矩阵
  9. 笔记本电脑频繁自动重启_如何解决电脑频繁自动重启
  10. sql,linq,lamd比较使用
  11. cmt obm odm 代工模式oem_OEM、ODM、OBM、OPM概念,作用与区别
  12. 防火墙基础之路由器与防火墙单臂路由和DHCP接口地址池的配置
  13. 荣耀30 pro鸿蒙系统,爆料:荣耀 30 Pro已开始测试华为鸿蒙系统
  14. Python自动化办公:openpyxl绘制图表
  15. cdr 表格自动填充文字_CDR小工具YG插件,从此提升工作效率!
  16. 自动驾驶专业名词简写简写缩写
  17. 阿里云邮箱登录日志中有异地IP登录是怎么回事?该怎么办?
  18. 剑网三哪个服务器比较稳定,剑网三怀旧服:老玩家忠告,新手最好不要玩奶和T...
  19. 【报告分享】2021小红书食饮品牌研究报告-艺恩(附下载)
  20. 保安值班安排系统C语言课程设计

热门文章

  1. drawitem设置指定行的背景颜色_Java 为 Excel 中的行设置交替背景色
  2. java图片识别查看器模拟_[转载]windows照片查看器无法显示图片内存不足
  3. JVM学习记录-类加载的过程
  4. 【习题 6-7 UVA - 804】Petri Net Simulation
  5. html之file标签 --- 图片上传前预览 -- FileReader
  6. ArrayBlockingQueue, LinkedBlockingQueue, ConcurrentLinkedQueue, RingBuffer
  7. sdut2784cf 126b Good Luck!(next数组)
  8. 使用Azure轻松实现Teams App的全球合规性
  9. 公共服务领域英文译写规范_公共领域日:对版权和公共领域重要性的思考
  10. 每天练习50个shell