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. 每日一皮:终于明白女朋友挂在嘴边的“鸽子蛋”为什么那么贵了...
  2. 强化学习(十六) 深度确定性策略梯度(DDPG)
  3. zookeeper平滑升级_zookeeper从3.4.8升级到3.4.14
  4. 数学建模——一维、二维插值模型详解Python代码
  5. 【数据竞赛】Kaggle竞赛如何保证线上线下一致性?
  6. SAP CRM呼叫中心里的事件注册机制
  7. 操作系统 --- [笔记]功能、组成
  8. 如何优化 .NET Core 中的 lambda 查询表达式 ?
  9. 给新手开店选品的建议
  10. 第12章类和动态内存分配
  11. python 获取表格中的空数据_在python beautifulsoup中获取表格单元格值为空时的文本输出...
  12. 四格漫画《MUXing》——请客记
  13. ceb转pdf linux,基于zynq的Linux根文件系统生成
  14. Automatic detection and segmentation of optic disc and fovea in retinal images
  15. flutter 单、双排按钮及选择联动ui
  16. 【游戏开发进阶】Unity流体模拟,支持粒子系统,支持流体碰撞交互(Obi Fluid插件使用教程)
  17. Linux下串口编制【转】
  18. PYTHON练习题:快递信息分拣程序代码(附源码与代码注释)
  19. 用IAR下载出现 Stack pointer is setup to incorrect alignment. Stack addr = 0xFFFFFFFF 如何解决?
  20. c语言.jpg图片转成数组_多张jpg图片合成pdf文件

热门文章

  1. C++学习笔记(二)——交换函数(swap)
  2. 智能停车O2O 独角兽初现:“ETCP停车”获5000万美金A轮融资
  3. 【转】android makefile文件分析
  4. c# 类的基本知识,未完,待续
  5. c语言程序设计 银行整存整取,《C语言程序设计习题试题集》.doc
  6. oracle中偏移,怎么对相同的坐标点偏移?
  7. js app缓存自动刷新_如何通过清除缓存来刷新App Store中的内容
  8. Oracle常用sql语句(一)
  9. 十五天精通WCF——第十一天 如何对wcf进行全程监控
  10. Mac怎么不能拷贝文件到U盘