文档目录

本节内容:

简介

使用Abp.Web.SignalR nuget包,使基于应用的ABP使用SignalR非常容易,查看SignalR文档了解SignalR的明细信息。

安装

服务端

在你的项目(通常是你的Web层)里安装Abp.Web.SignalRnuget包并在你的模块上添加对它的依赖:

  1. [DependsOn(typeof(AbpWebSignalRModule))]
  2. public class YourProjectWebModule : AbpModule
  3. {
  4. //...
  5. } 

然后和你一直做的那样,在你的启动类里使用MapSignalR方法:

  1. [assembly: OwinStartup(typeof(Startup))]
  2. namespace MyProject.Web
  3. {
  4. public class Startup
  5. {
  6. public void Configuration(IAppBuilder app)
  7. {
  8. app.MapSignalR();
  9. //...
  10. }
  11. }
  12. } 

注意:Abp.Web.SignalR仅依赖于Microsoft.AspNet.SignalR.Core包,所以,如果之前还未安装Microsoft.AspNet.SignalR包,你还需要在你的web项目里安装它(查看SignalR 文档获取更多信息)。

客户端

页面中应该包含abp.signalr.js,该文件包含在Abp.Web.Resources包里(启动模板中已安装),我们应该在signalr.hubs之后引入它:

  1. <script src="~/signalr/hubs"></script>
  2. <script src="~/Abp/Framework/scripts/libs/abp.signalr.js"></script> 

就只要这样, SignalR已经配置好且已集成到你的项目里。

连接确立

当你的页面包含abp.signalr.js,ABP会自动连接服务器(从客户端),通常情况下,这样很好,但有时你可能不想这样,在引入abp.signalr.js前,你可以添加如下代码禁用自动连接:

  1. <script>
  2. abp.signalr = abp.signalr || {};
  3. abp.signalr.autoConnect = false;
  4. </script> 

这种情况里,你可以调用abp.signalr.connect()函数手动连接服务器。

如果把abp.signalr.autoConnect设置为true,当客户端连接中断,ABP也会自动重新连接服务器(从客户端)。

当客户端连接到服务端时,会触发全局事件“abp.signalr.connected”,你可以注册这个事件,当连接成功确立时,可以执行你自己的行为。查看事件总线文档获取更多关于客户端事件的信息。

内置的功能

你可以在项目里使用SignalR的全部功能,另外,Abp.Web.SignalR包实现了一些内置的功能。

通知

Abp.Web.SignalR包实现了IRealTimeNotifier来发送实时的通知给客户端(查看通知系统),因此,你的用户可以收到实时的通知推送。

在线客户端

ABP提供了IOnlineClientManager来获取关于在线用户的信息(注入IOnlineClientManager,然后使用GetByUerIdOrNull,GetAllClients,IsOnline方法),IOnlineClientManager需要一个通信设施才能正常工作,Abp.Web.SignalR包提供了这个设施,所以你可以在应用的任何层里注入,然后使用IOnlineClientManager(如果已经安装SignalR)。

帕斯卡 vs 骆驼式

Abp.Web.SignalR包在序列化里用CamelCasePropertyNamesContractResolver重写了SignalR的默认的ContractResolver,因此,在服务端我们可以使用类的帕斯卡方式命名的方法而在客户端可以使用驼峰式命名的方法(因为驼峰式在javascript里更原生)来发送/接收对象,如果你想为你程序集里的某些类忽略这点,你可以把这些类添加到AbpSignalRContractResolver.IgnoredAssemblies列表里。

你的SignalR代码

Abp.Web.SignalR包简单化了你的SignalR代码,假设你想在应用里添加一个Hub:

  1. public class MyChatHub : Hub, ITransientDependency
  2. {
  3. public IAbpSession AbpSession { get; set; }
  4.  
  5. public ILogger Logger { get; set; }
  6.  
  7. public MyChatHub()
  8. {
  9. AbpSession = NullAbpSession.Instance;
  10. Logger = NullLogger.Instance;
  11. }
  12.  
  13. public void SendMessage(string message)
  14. {
  15. Clients.All.getMessage(string.Format("User {0}: {1}", AbpSession.UserId, message));
  16. }
  17. public async override Task OnConnected()
  18. {
  19. await base.OnConnected();
  20. Logger.Debug("A client connected to MyChatHub: " + Context.ConnectionId);
  21. }
  22.  
  23. public async override Task OnDisconnected(bool stopCalled)
  24. {
  25. await base.OnDisconnected(stopCalled);
  26. Logger.Debug("A client disconnected from MyChatHub: " + Context.ConnectionId);
  27. }
  28. } 

我们实现了ITransientDependency来简单的注册我们的Hub到依赖注入系统里(根据你的需要,可以把它变成单例),我们以属性注入模式注入会话日志记录器

SendMessage是一个我们hub的方法,可被客户端使用,我们在这个方法里,调用所有客户的getMessage函数,如上所示,我们可以使用AbpSession获取当前用户id(如果用户已登录)。我们重写了OnConnected和OnDisConnected,实质上不需要它们,只是为了演示。

下面用客户端Javascript代码使用我们的hub发送/接收消息:

  1. var chatHub = $.connection.myChatHub; //get a reference to the hub

  2. chatHub.client.getMessage = function (message) { //register for incoming messages
  3. console.log('received message: ' + message);
  4. };
  5.  
  6. abp.event.on('abp.signalr.connected', function() { //register for connect event
  7. chatHub.server.sendMessage("Hi everybody, I'm connected to the chat!"); //send a message to the server
  8. }); 

这样我们就可以在任何需要的时候使用chatHub发送消息给服务端,查看 SignalR 文档 获取更多有关Signal信息。

kid1412附:英文原文:http://www.aspnetboilerplate.com/Pages/Documents/SignalR-Integration

ABP文档 - SignalR 集成的更多相关文章

  1. ABP文档 - Hangfire 集成

    文档目录 本节内容: 简介 集成 Hangfire 面板授权 简介 Hangfire是一个综合的后台作业管理器,可以在ABP里集成它替代默认的后台作业管理器,你可以为Hangfire使用相同的后台作业 ...

  2. ABP文档 - Quartz 集成

    文档目录 本节内容: 简介 安装 创建工作 调度工作 更多 简介 Quartz 是一个功能完整的开源工作调度系统,可用于最小的应用到一个大型的企业系统.Abp.Quartz 包简单地把Quartz集成 ...

  3. ABP文档 - EntityFramework 集成

    文档目录 本节内容: Nuget 包 DbContext 仓储 默认仓储 自定义仓储 特定的仓储基类 自定义仓储示例 仓储最佳实践 ABP可使用任何ORM框架,它已经内置了EntityFrame(以下 ...

  4. ABP文档笔记系列

    ABP文档笔记 - 模块系统 及 配置中心 ABP文档笔记 - 事件BUS ABP文档笔记 - 数据过滤 ABP文档笔记 - 规约 ABP文档笔记 - 配置.设置.版本.功能.权限 ABP文档笔记 - ...

  5. ABP理论学习之SignalR集成

    返回总目录 本篇目录 介绍 安装 建立连接 内置功能 你自己的SignaR代码 介绍 Abp.Web.SignalR 使得在基于ABP的应用程序中使用 SignalR相当容易.查看SignalR文档获 ...

  6. ABP文档 - Javascript Api - AJAX

    本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...

  7. ABP文档 - 通知系统

    文档目录 本节内容: 简介 发送模式 通知类型 通知数据 通知重要性 关于通知持久化 订阅通知 发布通知 用户通知管理器 实时通知 客户端 通知存储 通知定义 简介 通知用来告知用户系统里特定的事件发 ...

  8. ABP文档 - 后台作业和工作者

    文档目录 本节内容: 简介 后台作业 关于作业持久化 创建一个后台作业 在队列里添加一个新作业 默认的后台作业管理器 后台作业存储 配置 禁用作业执行 Hangfire 集成 后台工作者 创建一个后台 ...

  9. ABP文档 - Mvc 视图

    文档目录 本节内容: 简介 AbpWebViewPage 基类 简介 ABP通过nuget包Abp.Web.Mvc集成到Mvc视图里,你可以像往常那样创建常规的视图. AbpWebViewPage 基 ...

随机推荐

  1. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

  2. Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  3. .Net多线程编程—任务Task

    1 System.Threading.Tasks.Task简介 一个Task表示一个异步操作,Task的创建和执行是独立的. 只读属性: 返回值 名称 说明 object AsyncState 表示在 ...

  4. JS判断鼠标进入容器方向的方法和分析window.open新窗口被拦截的问题

    1.鼠标进入容器方向的判定 判断鼠标从哪个方向进入元素容器是一个经常碰到的问题,如何来判断呢?首先想到的是:获取鼠标的位置,然后经过一大堆的if..else逻辑来确定.这样的做法比较繁琐,下面介绍两种 ...

  5. 解读发布:.NET Core RC2 and .NET Core SDK Preview 1

    先看一下 .NET Core(包含 ASP.NET Core)的路线图: Beta6: 2015年7月27日 Beta7: 2015年9月2日 Beta8: 2015年10月15日 RC1: 2015 ...

  6. Mysql基础代码(不断完善中)

    Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...

  7. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...

  8. AlloyTouch实战--60行代码搞定QQ看点资料卡

    原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/kandian 先验货 访问DEMO你也可以点击这里 源代码可以点击这里 如你体验所见,流程的滚动的 ...

  9. Linux下编译安装Vim8.0

    什么是Vim? Vim 是经典的 UNIX 编辑器 Vi 的深度改良版本.它增加了许多功能,包括:多级撤销.格式高亮.命令行历史.在线帮助.拼写检查.文件名补完.块操作.脚本支持,等等.除了字符界面版 ...

  10. U盘安装Kali 出现cd-rom无法挂载 已解决

    用U盘安装Kali Linux的过程中,出现cd-rom无法挂载的现象,百度坑比啊,醉了.下面亲测成功 出现无法挂载后,选择执行shell 第一步:df -m此时会看到挂载信息,最下面的是/dev/* ...