asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection
2017-03-22 17:16
459 查看
在前面的两篇文章中,我们讲到的都是如何将消息从server推向client,又或者是client再推向server,貌似这样的逻辑没什么异常,但是放在真实
的环境中,你会很快发现有一个新需求,如何根据第三方系统的数据变化来即时的将新数据推送到各个客户端,比如下面这样:
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317164608146-1003566984.png)
ok,原理就是上面的这张图,如果我们Server中的“监控程序”发现有更新,这个时候,监控程序需要将更新的数据送给server程序,然后由server程序
推送到各个客户端,那下面我们该怎么做到呢?
一:GlobalHost 属性
首先我们简单的看一下它的解释,叫做“提供对默认主机信息的访问”,可以看到,这是一个所谓的全局设置,里面的5个属性,个个都非常重要,因为
对他们的设置,影响的都是全局性的,好了,作为这篇我们关注的就是其中之一ConnectionManager属性,如下图:
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317161956053-1229566792.png)
它呢,就是获取你当前的Connection连接,好了,废话不多说,我们来做一个例子看一看。
二:实例演示
1. 伪造“外部系统”
在这里我就Fake一个单独页面(mytest.aspx),假装从外面获取到了"我是mytest.aspx"这条数据,如下:
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317163051740-952984368.png)
在上图中,你也看到了GetConnectionContext方法是接受一个泛型的参数,而这个“泛型参数”,就是你的PersistentConnection实现类,这里也就
是MyConnection1,当然这里不光可以访问Persistent,还可以访问Hub类,这个我们放到后续和大家讲解。
2. 开启两个客户端
开启这两个就是为了连接到我们的server,假装多用户,也就是PersistentConnection类,如下:
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317163532693-736496965.png)
现在两个client都开启了,然后各自都收到了server的欢迎信息,以及各自和server通信的标识。
3. 访问mytest页面,模拟通知各个客户端,如下图:
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317163823943-740019961.png)
好了,这个也是本篇课程所讲的主要东西,虽然不显眼,但是在真实环境中对您确实非常的有帮助~~~
的环境中,你会很快发现有一个新需求,如何根据第三方系统的数据变化来即时的将新数据推送到各个客户端,比如下面这样:
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317164608146-1003566984.png)
ok,原理就是上面的这张图,如果我们Server中的“监控程序”发现有更新,这个时候,监控程序需要将更新的数据送给server程序,然后由server程序
推送到各个客户端,那下面我们该怎么做到呢?
一:GlobalHost 属性
首先我们简单的看一下它的解释,叫做“提供对默认主机信息的访问”,可以看到,这是一个所谓的全局设置,里面的5个属性,个个都非常重要,因为
对他们的设置,影响的都是全局性的,好了,作为这篇我们关注的就是其中之一ConnectionManager属性,如下图:
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317161956053-1229566792.png)
它呢,就是获取你当前的Connection连接,好了,废话不多说,我们来做一个例子看一看。
二:实例演示
1. 伪造“外部系统”
在这里我就Fake一个单独页面(mytest.aspx),假装从外面获取到了"我是mytest.aspx"这条数据,如下:
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317163051740-952984368.png)
在上图中,你也看到了GetConnectionContext方法是接受一个泛型的参数,而这个“泛型参数”,就是你的PersistentConnection实现类,这里也就
是MyConnection1,当然这里不光可以访问Persistent,还可以访问Hub类,这个我们放到后续和大家讲解。
2. 开启两个客户端
开启这两个就是为了连接到我们的server,假装多用户,也就是PersistentConnection类,如下:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /> </head> <body> <script src="/scripts/jquery-1.10.2.js"></script> <script src="/scripts/jquery.signalR-2.1.2.js"></script> <!--<script src="/signalr/js"></script>--> <script src="scripts/myjs.js"></script> <script type="text/javascript"> var conn = $.connection("/myconnection"); conn.start().done(function (data) { console.log(data.id); }); conn.received(function (data) { console.log(data); }); </script> </body> </html>
public class MyConnection1 : PersistentConnection { protected override Task OnConnected(IRequest request, string connectionId) { Debug.WriteLine("OnConnected"); return Connection.Send(connectionId, "Welcome!"); } protected override Task OnReceived(IRequest request, string connectionId, string data) { Debug.WriteLine(data); return Connection.Send(connectionId, data); } protected override Task OnDisconnected(IRequest request, string connectionId, bool stopCalled) { Debug.WriteLine("OnDisconnected"); return base.OnDisconnected(request, connectionId, stopCalled); } protected override Task OnReconnected(IRequest request, string connectionId) { Debug.WriteLine("OnReconnected"); return base.OnReconnected(request, connectionId); } }
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317163532693-736496965.png)
现在两个client都开启了,然后各自都收到了server的欢迎信息,以及各自和server通信的标识。
3. 访问mytest页面,模拟通知各个客户端,如下图:
![](http://images2015.cnblogs.com/blog/214741/201603/214741-20160317163823943-740019961.png)
好了,这个也是本篇课程所讲的主要东西,虽然不显眼,但是在真实环境中对您确实非常的有帮助~~~
相关文章推荐
- asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection
- asp.net signalR 专题—— 第三篇 如何从外部线程访问 PersistentConnection
- 如何解决Asp.Net Ajax 1.0跨域名框架情况下javascript“访问拒绝”的问题[翻译]
- 解决ASP.NET创建的线程的用户改变引发的"拒绝访问"错误
- 如何让ASP.NET访问网络盘
- asp.net 线程如何进行分配
- Asp.Net 客户端JS如何访问服务端控件的值?
- 如何在asp.net中调用外部exe文件
- 如何利用缓存提高asp.net网站访问速度
- 如何访问ASP.Net网站bin目录内的文件
- Win2003里面ASP.net 程序如何访问UNC路径呢?
- 如何在局域网内其他机器访问我的asp.net网站?
- ASP.NET中如何在任何子目录访问ACCESS数据库?
- 如何使用ASP.NET AJAX访问Web Services
- 关于Asp.net调用外部程序的拒绝访问错误
- XP下如何解决“ASP.NET 未被授权访问所请求的资源”的问题
- ASP.NET DEMO 10: 如何通过 javascript 访问 GridView/DataGrid 选中 CheckBox 行各列的值
- asp.net中, 如何在后台获取访问这个页面的用户的名字?
- 如何解决xp文件夹权限,数据库只读,“ASP.NET 未被授权访问所请求的资源”
- 如何利用缓存提高asp.net网站访问速度