文档目录

本节内容:

简介

使用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 集成的更多相关文章

  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. 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态

    最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...

  2. 札记:android手势识别,MotionEvent

    摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势T ...

  3. 【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

  4. premere cs4绿色版 安装 并且 视频导出 讲解

    最近室友,开始在玩视频剪辑,用的是 premere cs4 绿色版.让他遇到的最大问题也是我之前遇到的最大问题,就是视频导出. 所以我在这里上传一套自己的一点点经验吧. 接下来,我就总结一下 我是怎么 ...

  5. Python标准库--typing

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...

  6. Kooboo CMS技术文档之二:Kooboo CMS的安装步骤

    在IIS上安装Kooboo CMS Kooboo CMS安装之后 安装的常见问题 1. 在IIS上安装Kooboo CMS Kooboo CMS部署到正式环境相当简单,安装过程是一个普通MVC站点在I ...

  7. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  8. PHP-----文件系统的交互

    本文讲解php中于文件交互中所使用的函数 代码示例 <html> <head> <title> File Detail </title> </he ...

  9. 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

    WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...

  10. CSS中强悍的相对单位之em(em-and-elastic-layouts)学习小记

    使用相对单位em注意点 1.浏览器默认字体是16px,即1em = 16px,根元素设置如下 html{ font-size: 100%; /* WinIE text resize correctio ...