ASP.NET 用 SignalR 建立浏览器与服务器的持久连接-实战篇

作者:vkvi 来源:ITPOW(原创) 日期:2016-12-9

打开 Visual Studio(我的版本是 2013),建立一个 ASP.NET 项目。

第一步、添加一个“SignalR 永久连接类”

如下图:

SignalR 永久连接类

添加后,我们可以发现 Visual Studio 还自动为我们添加了一些引用,还有 Scripts 文件夹(里面包含 jquery.signalR-2.0.0.js)。这个类初始的代码如下:

第二步、添加“OWIN Startup 类”

OWIN Startup 类

然后添加点代码:

MyConnection1 就是第一步创建的类名。

第三步、添加一个“Web 窗体 ”

运行效果如下:

SignalR 运行效果

扩展一下

MyConnection1:

  • 方法 OnConnected:创建了连接时。
  • 方法 OnReceived:收到了客户端提交的数据时,参数 data 就是它所收到的数据。
  • 方法 OnDisconnected:断开了连接时。上面没有用它。
  • 方法 OnReconnected:重新连接了时。上面没有用它。
  • ……

MyConnection1 的 Connection 属性:

  • 方法 Send:向浏览器发送数据,第一个参数为 connectionId(字符串类型),第二个参数为要发送的数据。
  • 方法 Broadcast:向所有浏览器(准确地说应该是所有连接)发送数据。

JS:

  • var conn = $.connection("/myPath"); 创建连接对象。
  • conn.start().done() start() 是开始连接,done() 连接成功后要执行的代码。
  • conn.received() 是收到服务器发送来的数据要执行的。
  • conn.send() 是向服务器发送数据。上面没有用它。

下面看一个更全点的代码:

上面不是说有些方法没有用到没,下面的例子更全一点:

MyConnection1:

Web 窗体的代码:

到目前为止,大家可能都提不起兴趣,服务器主动发送数据在哪里???

我们现在做一个定时程序,服务器定时向浏览器发送数据。

新建 Global.asax(全局应用程序类)(并不是说这些代码只能在 Global.asax 中运行,我们只是为了测试定时执行,才放在这里的)。

添加如下代码:

效果如下:

SignalR 服务器主动发送数据

以上代码,我们用的是 context.Connection.Broadcast,如果是针对某一连接发送,则用 Send 方法,这就需要 connectionId,不过要选择哪个 connectionId 都是业务层面的事,不是问题。


相关文章