博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mvc 下的 signalR使用小结
阅读量:6982 次
发布时间:2019-06-27

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

hot3.png

sirnal下有两种使用。

一种是  ,另外一种是 。详细请看  ;

hubs支持浏览器与客户端互相调用方法。所以应用更广泛。

在前台页面上写上如下脚本:

//初始化signalr    function initSignalr(parameters) {        var chat = $.connection.chat;//这里的chat为服务器上的继承了HUB的类的HubName。        chat.client.addMessage = function(msg) {             $('#submit').trigger('click');             $('#submit2').trigger('click');        };        $.connection.hub.start().done(function() {        });    }

上面给client写了一个addmessage方法。之后,服务器将调用它

下面这条语句执行的方法是空的,但是必须要有

$.connection.hub.start().done(function() {        });
在页面加载完毕后会通过此方法向浏览器发送请求。function里可以写一些绑定事件,如:当点击按钮后,

调用了服务器的send方法。send必须是服务器上有的

$.connection.hub.start().done(function() {            $("#broadcast").click(function () {                // Call the chat method on the server                chat.server.send($('#msg').val());            });        });

然后在document ready方法中注册此方法:
$(function () {            initDateSelect();            initTableSelect();            resetTableTile();            initSignalr();        })

需要在页面中引入jquery.js,signalr.js以及hubs.js,在mvc中,hub.js可以通过请求服务器获得,

服务器在global.asax中注册映射:
 

RouteTable.Routes.MapHubs();
编写类继承自hub:
服务器中
实现了上面的send

namespace CYINC.MOMain.Plugin.LiveCharts.Connection{    [HubName("chat")]    public class DJ_Connection : Hub    {        public void Send(string message)        {            Clients.All.addMessage(message);        }    }}

注意,这里的DJ_Connection继承了Hub,并且它有一个特性HubName:chat, 还记得页面中这个么:

var chat = $.connection.chat;//这里的chat为服务器上的继承了HUB的类的HubName。
chat是你需要建立hub连接的class的HubName的值。

在controller中,新建action对上面的类调用: addMessage为客户端的脚本中的方法,所以脚本中,此方法也必须有实现。

//通过web请求向客户端发送消息        public ActionResult Send()        {            var context = GlobalHost.ConnectionManager.GetHubContext
(); context.Clients.All.addMessage("Admin");//这里的admin是随便写的,因为客户端并不需要接收此消息,仅仅是收到消息ajax重新请求数据 return null; }

不能够直接访问Hub的对象。必须要这样才行:

var context = GlobalHost.ConnectionManager.GetHubContext
();

这样就能通过给发送http请求,来触发send方法,send方法通过hub调用客户端(浏览器)的addMessage方法。来控制所有客户端做一些事情。比如一起更新数据等。

====================================================================

sql server的表触发器可以这样写:(首先开启数据库的clr支持)

--开启数据库CLR 支持exec sp_configure 'clr enabled', 1;--开始数据的验证alter database MOMain set TRUSTWORTHY on;--相应数据库RECONFIGURE

数据库clr集成的dll这样写,当数据库触发CallWeb方法时,发送上面的send请求给服务器:

namespace SqlDependency{    public class Program    {        ///         /// 给指定的URL发送请求,服务器收到请求将通知客户端拉数据,此dll将集成到数据库的触发器        ///         ///         /// 
[SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.Read)] public static String CallWeb(String url) { WebRequest req = WebRequest.Create(url); var rep = req.GetResponse(); return "1"; } }}
编译后,将此dll集成到数据库:
use MOMain;--数据库名create assembly SqlDependency FROM 'D:\SqlDependency.dll'--程序集名称和地址WITH PERMISSION_SET = UNSAFEGO--方法名写正确,为程序集中的方法名,注意参数个数create function CallWeb(@FileFullName as nvarchar(max))returns nvarchar(max)with returns null on null inputexternal name [SqlDependency].[SqlDependency.Program].[CallWeb]GO--编写触发器,传递参数以及CREATE TRIGGER [dbo].[UserTableChangedEvent] on [dbo].[dj_chanchu_10min]  --表名称    FOR INSERT, DELETE, UPDATE  --当有增删改时,触发器将被触发      AS      BEGIN      DECLARE @URL AS VARCHAR(150)         SET @URL = 'http://localhost/djcharts/send';  --服务器接收请求的url       Select dbo.WriteStringToFile(@URL)                       END    GO

这样,当表数据有变化时。会发送http请求给服务器,服务器通知所有的浏览器重新拉一次数据。做到了实时更新,实时监控。

转载于:https://my.oschina.net/u/867090/blog/123474

你可能感兴趣的文章
高中时的口头禅
查看>>
C++ 虚函数表解析
查看>>
[SCOI2009]windy数
查看>>
Struts2--Action属性接收参数
查看>>
2012年科技新闻背后的大数字
查看>>
报价单内,同一物料只允许一条行价格记录
查看>>
leetcode 283. Move Zeroes
查看>>
自己的php函数库
查看>>
HDU Problem 1599 find the mincost route 【Floyd求最小环】
查看>>
HDU2017多校联合 contest 1
查看>>
基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理(转载自:http://www.cnblogs.com/wuhuacong/p/4175266.html)...
查看>>
range
查看>>
[Noi2002]Savage 题解
查看>>
特征选择, 经典三刀(转)
查看>>
【Python3爬虫】自动查询天气并实现语音播报
查看>>
新的公司
查看>>
【JavaScript】02.基础语法学习
查看>>
自行学习XAML控件后的简单想法(作业一)
查看>>
python3 集合中的常用方法
查看>>
ECSHOP生成缩略图模糊
查看>>