博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ABP理论学习之SignalR集成
阅读量:7067 次
发布时间:2019-06-28

本文共 3169 字,大约阅读时间需要 10 分钟。

本篇目录

介绍

 使得在基于ABP的应用程序中使用 SignalR相当容易。查看获取更多关于SignalR的详细信息。

安装

服务端

nuget包安装到你的项目中(一般是web层),然后给你的模块添加一个依赖:

[DependsOn(typeof(AbpWebSignalRModule))]public class YourProjectWebModule : AbpModule{    //...}

然后在你的OWIN Startup类中使用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包。因此,如果你之前没有安装,那么你也需要将安装到你的web项目中。

客户端

在页面上应该添加abp.signalr.js脚本。它位于包中(在启动模块中已经安装了)。我们应该在signalr总线之后包含它:

就这样,SignalR就配置好了,也就集成到了你的项目中。

建立连接

当页面上包含abp.signalr.js时,ABP会 自动连接 到服务器(从客户端)。一般来说这很好,但是也可能存在你不想这样的情况。那么你可以在包含 abp.signalr.js之前添加下面的代码来关闭自动连接。

这样,当你需要连接到服务器时,你可以手动调用abp.signalr.connect()函数。

当客户端连接到服务器时,会触发全局事件“abp.signalr.connected”。当该连接成功建立时,你可以注册到该事件以采取相应行动。

内置功能

你可以在应用程序中使用SignalR的所有功能,此外,Abp.Web.SignalR包实现了一些内置的功能。

通知

Abp.Web.SignalR包实现了 IRealTimeNotifier来向客户端发送实时通知(查看《》)。因此,你的用户可以获得实时的推送通知。

在线客户端

ABP提供了IOnlineClientManager来获取关于在线用户的信息(比如,注入IOnlineClientManager然后使用GetByUserIdOrNull, GetAllClients, IsOnline 方法 )。为了能够正确地工作,IOnlineClientManager需要一个通讯基础设施。Abp.Web.SignalR提供了一个这样的基础设施。因此,如果安装了SignalR,那么在应用的任何层都可以注入并使用IOnlineClientManager。

PascalCase vs. camelCase

Abp.Web.SignalR包在序列化时使用CamelCasePropertyNamesContractResolver覆盖了SignalR默认的ContractResolver。因此,我们在服务端的类具有 PascalCase属性,而在客户端作为 camelCase使用来发送/接收对象(因为在javascript中camelCase是更受人喜欢的命名)。如果你想在某些程序集中忽略这个,那么你可以将那些程序集添加AbpSignalRContractResolver.IgnoredAssemblies 列表中。

你自己的SignaR代码

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注册到依赖注入系统中(你可以基于你的需求使它是单例的【singleton】)。我们也使用属性注入了session和logger。

SendMessage是hub的一个方法,它可以被客户端使用。在这个方法中,我们可以调用所有客户端的 getMessage函数。正如你看到的那样,我们可以使用AbpSession来获得当前的用户id(如果用户登录了系统)。为了演示,我们也重写了 OnConnected 和 OnDisconnected,实际这里是不需要的。

这里,客户端的javascript代码使用了我们的集线器hub发送/接收信息。

var chatHub = $.connection.myChatHub; //获取 hub的引用chatHub.client.getMessage = function (message) {
//为即将到来的信息注册 console.log('received message: ' + message);};abp.event.on('abp.signalr.connected', function() {
//为连接事件注册chatHub.server.sendMessage("Hi everybody, I'm connected to the chat!"); //给服务器发送信息});

然后,无论何时需要向服务器发送信息,我们都可以使用chatHub。这里再提醒一下,想要获取更多关于SignalR的信息,可以点击查看

本文转自tkbSimplest博客园博客,原文链接:http://www.cnblogs.com/farb/p/ABPSignalRIntegration.html,如需转载请自行联系原作者

你可能感兴趣的文章
百兆、千兆网线的做法
查看>>
cisco 10条IOS管理命令
查看>>
文娱产业兴起 娱乐有了 文化在哪?
查看>>
Inotifywait解决监控子目录树的情况
查看>>
两棵树是否相同
查看>>
基本正则表达式和扩展正则表达式中的括号问题
查看>>
nginx+tomcat7 DOCKER镜像的dockerfile
查看>>
关于笔记本电脑网卡出问题的简单解决
查看>>
IPV4与IPV6表示方法
查看>>
桌面支持--不懂不要乱动-尤其是别人的东西
查看>>
hadoop集群上运行自定义wordcount
查看>>
Linux条件测试
查看>>
阿兰•图灵与人工智能
查看>>
操作系统简单快捷安装方式
查看>>
微软MVA征文参赛作品_微软云计算,缔造新生活
查看>>
openshift 安装
查看>>
使用图形化工具Gitbook Editor编辑gitbook电子书
查看>>
SSH免密码登录原理
查看>>
我的友情链接
查看>>
我的友情链接
查看>>