ABP文档 - SignalR 集成
本节内容:
简介
使用Abp.Web.SignalR nuget包,使基于应用的ABP使用SignalR非常容易,查看SignalR文档了解SignalR的明细信息。
安装
服务端
在你的项目(通常是你的Web层)里安装Abp.Web.SignalRnuget包并在你的模块上添加对它的依赖:
[DependsOn(typeof(AbpWebSignalRModule))]
public class YourProjectWebModule : AbpModule
{
//...
}
然后和你一直做的那样,在你的启动类里使用MapSignalR方法:
[assembly: OwinStartup(typeof(Startup))]
namespace MyProject.Web
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR(); //...
}
}
}
注意:Abp.Web.SignalR仅依赖于Microsoft.AspNet.SignalR.Core包,所以,如果之前还未安装Microsoft.AspNet.SignalR包,你还需要在你的web项目里安装它(查看SignalR 文档获取更多信息)。
客户端
页面中应该包含abp.signalr.js,该文件包含在Abp.Web.Resources包里(启动模板中已安装),我们应该在signalr.hubs之后引入它:
<script src="~/signalr/hubs"></script>
<script src="~/Abp/Framework/scripts/libs/abp.signalr.js"></script>
就只要这样, SignalR已经配置好且已集成到你的项目里。
连接确立
当你的页面包含abp.signalr.js,ABP会自动连接服务器(从客户端),通常情况下,这样很好,但有时你可能不想这样,在引入abp.signalr.js前,你可以添加如下代码禁用自动连接:
<script>
abp.signalr = abp.signalr || {};
abp.signalr.autoConnect = false;
</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:
public class MyChatHub : Hub, ITransientDependency
{
public IAbpSession AbpSession { get; set; } public ILogger Logger { get; set; } public MyChatHub()
{
AbpSession = NullAbpSession.Instance;
Logger = NullLogger.Instance;
} public void SendMessage(string message)
{
Clients.All.getMessage(string.Format("User {0}: {1}", AbpSession.UserId, message));
} public async override Task OnConnected()
{
await base.OnConnected();
Logger.Debug("A client connected to MyChatHub: " + Context.ConnectionId);
} public async override Task OnDisconnected(bool stopCalled)
{
await base.OnDisconnected(stopCalled);
Logger.Debug("A client disconnected from MyChatHub: " + Context.ConnectionId);
}
}
我们实现了ITransientDependency来简单的注册我们的Hub到依赖注入系统里(根据你的需要,可以把它变成单例),我们以属性注入模式注入会话和日志记录器。
SendMessage是一个我们hub的方法,可被客户端使用,我们在这个方法里,调用所有客户的getMessage函数,如上所示,我们可以使用AbpSession获取当前用户id(如果用户已登录)。我们重写了OnConnected和OnDisConnected,实质上不需要它们,只是为了演示。
下面用客户端Javascript代码使用我们的hub发送/接收消息:
var chatHub = $.connection.myChatHub; //get a reference to the hub
chatHub.client.getMessage = function (message) { //register for incoming messages
console.log('received message: ' + message);
}; abp.event.on('abp.signalr.connected', function() { //register for connect event
chatHub.server.sendMessage("Hi everybody, I'm connected to the chat!"); //send a message to the server
});
这样我们就可以在任何需要的时候使用chatHub发送消息给服务端,查看 SignalR 文档 获取更多有关Signal信息。
kid1412附:英文原文:http://www.aspnetboilerplate.com/Pages/Documents/SignalR-Integration
ABP文档 - SignalR 集成的更多相关文章
- ABP文档 - Hangfire 集成
文档目录 本节内容: 简介 集成 Hangfire 面板授权 简介 Hangfire是一个综合的后台作业管理器,可以在ABP里集成它替代默认的后台作业管理器,你可以为Hangfire使用相同的后台作业 ...
- ABP文档 - Quartz 集成
文档目录 本节内容: 简介 安装 创建工作 调度工作 更多 简介 Quartz 是一个功能完整的开源工作调度系统,可用于最小的应用到一个大型的企业系统.Abp.Quartz 包简单地把Quartz集成 ...
- ABP文档 - EntityFramework 集成
文档目录 本节内容: Nuget 包 DbContext 仓储 默认仓储 自定义仓储 特定的仓储基类 自定义仓储示例 仓储最佳实践 ABP可使用任何ORM框架,它已经内置了EntityFrame(以下 ...
- ABP文档笔记系列
ABP文档笔记 - 模块系统 及 配置中心 ABP文档笔记 - 事件BUS ABP文档笔记 - 数据过滤 ABP文档笔记 - 规约 ABP文档笔记 - 配置.设置.版本.功能.权限 ABP文档笔记 - ...
- ABP理论学习之SignalR集成
返回总目录 本篇目录 介绍 安装 建立连接 内置功能 你自己的SignaR代码 介绍 Abp.Web.SignalR 使得在基于ABP的应用程序中使用 SignalR相当容易.查看SignalR文档获 ...
- ABP文档 - Javascript Api - AJAX
本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...
- ABP文档 - 通知系统
文档目录 本节内容: 简介 发送模式 通知类型 通知数据 通知重要性 关于通知持久化 订阅通知 发布通知 用户通知管理器 实时通知 客户端 通知存储 通知定义 简介 通知用来告知用户系统里特定的事件发 ...
- ABP文档 - 后台作业和工作者
文档目录 本节内容: 简介 后台作业 关于作业持久化 创建一个后台作业 在队列里添加一个新作业 默认的后台作业管理器 后台作业存储 配置 禁用作业执行 Hangfire 集成 后台工作者 创建一个后台 ...
- ABP文档 - Mvc 视图
文档目录 本节内容: 简介 AbpWebViewPage 基类 简介 ABP通过nuget包Abp.Web.Mvc集成到Mvc视图里,你可以像往常那样创建常规的视图. AbpWebViewPage 基 ...
随机推荐
- 应用工具 .NET Portability Analyzer 分析迁移dotnet core
大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...
- Redis数据库
Redis是k-v型数据库的典范,设计思想及数据结构实现都值得学习. 1.数据类型 value支持五种数据类型:1.字符串(strings)2.字符串列表(lists)3.字符串集合(sets)4.有 ...
- ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
虽然ASP.NET Core应用的路由是通过RouterMiddleware这个中间件来完成的,但是具体的路由解析功能都落在指定的Router对象上,不过我们依然有必要以代码实现的角度来介绍一下这个中 ...
- Hawk 4.6 并行化
并行化 Hawk支持单机并行化,也就是使用多线程获取数据.它可以控制目前所有任务的数量,为了不给网站造成过大的压力,仅当任务池中的任务数量小于一定值后,才会插入新的任务. 你可以在数据清洗的 执行面板 ...
- [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?
你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...
- Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)
忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...
- bzoj1901--树状数组套主席树
树状数组套主席树模板题... 题目大意: 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[ ...
- es6小白学习笔记(一)
1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...
- 如何开启MySQL 5.7.12 的二进制日志
1. 打开/etc下的my.cnf文件 2. 编辑它,添加内容: log_bin=binary-log #二进制日志的文件名 server_id=1 #必须指定server_id,这是MySQL ...
- iOS开发系列--地图与定位
概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...