专栏首页逸鹏说道在ASP.NET 5中使用SignalR

在ASP.NET 5中使用SignalR

题记:SignalR作为ASP.NET中进行Web实时双向通信的组件,在ASP.NET 5中也得到了同步发展。不过,用法和之前还是在细节上有所不同,而资料又相对稀少。本文就是一个简单的入门向导。

通过SignalR,开发人员可以在ASP.NET开发的Web应用中实现服务器和客户端的双向实时通信。服务器可以即时推送内容给在线的客户端。SignalR首选Web Sockets作为底层实现,针对非现代浏览器也可以回退到其他兼容技术。它的特性很丰富,支持链接管理、分组连接和授权控制等。

在ASP.NET 5时代,SignalR也同步升级到SignalR 3.x,不过Javascript的客户端库还是2.x版本。同时,用法和之前在ASP.NET 4.x时代(比如在ASP.NET MVC 5中)还是有点细微的区别,所以导致参考现有文档可能会遇到错误。那么如何在ASP.NET 5的Web应用中使用SignalR 3呢,下面就简单讲解一下步骤:

1,不用说,一开始就是新建一个ASP.NET 5的Web应用程序项目

2,新建成功后。在Solution Explorer中打开“project.json”文件,在“dependencies”中添加"Microsoft.AspNet.SignalR.Server": "3.0.0-rc1-final",以便引用SignalR的服务端函数库

3,展开“Dependencies”,右击“Bower”节点,选择“Manage Bower Packages…”选项,在Bower包安装界面,切换到“Browse”,搜索“SignalR”并安装。需要注意的是,本文书写的时候只能安装signalr 2.2.0的js函数库,但是不影响使用。

4,创建一个文件夹(比如名为”Hubs“)来包含所有Hub类,建议规范如此,并非强制要求。在Hubs文件夹中添加一个名为ChatHub的类,并继承Microsoft.AspNet.SignalR.Hub。

5,理论上,如果你只打算从服务端往客户端推送消息的话,Hub类里面可以不写任何东西。不过为了实现一个简单的聊天功能,我们还是写点东西,写了两个方法Send和Join供客户端调用。代码如下:

public class ChatHub : Hub{ public void Send(string message) { var name = Context.Request.HttpContext.Session.GetString("name"); Clients.All.addNewMessageToPage(name, message); } public void Join(string name) { Context.Request.HttpContext.Session.SetString("name", name); }}

6,然后在Startup.cs文件中,的”ConfigureServices“中添加2行代码services.AddSignalR();services.AddTransient<ChatHub>();。(第二行代码的目的是后续在Hub外部调用客户端方法的时候,可以方便的进行依赖注入。)接着在”Configure“中添加1行代码app.UseSignalR();

7,在视图文件中实现加入、发送消息、显示消息的界面,代码基本参考了(http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr-and-mvc)中的。我添加了加入聊天的功能。另外,引用自动生成的hub代理js文件的地址由”signalr/hubs“变为了”signalr/js“。这个地址,可以在Startup中配置,不过默认值是这个且和之前不同。

8,要从Hub中发送消息到客户端,需要在服务端的代码中通过依赖注入引用IHubContext<ChatHub>,并直接调用dynamic方法。代码如下:

private readonly IHubContext<ChatHub> _hub; public HomeController(IHubContext<ChatHub> hub){ _hub = hub;} public IActionResult SendMessageToClients(string message){ _hub.Clients.All.sendMessageFromServer(message); return Content("<h1>OK</h1>");}

完整的项目代码共享地址在:https://zyg.blob.core.windows.net/share/ASP.NET%205%20SignalR.zip

SignalR类似与JavaScript实时框架,如Socket.IO。SignalR能够完成客户端向服务器的异步通信,并同时支持服务器向浏览器客户端推送事件。SignalR的连接通过日益流行的WebSockets API完成,而如果WebSockets无法使用,它会透明地回落为长轮询技术(long-polling technique)。如果开发人员想使用Signal,需要在客户端层使用像jQuery的JavaScript框架,并在服务端层使用.NET代码编写应用和服务。SignalR具有多种编程模型(PersistentConnectionsHubs),它为开发人员提供了连接、消息接收群以及事件处理器的不同层次的访问。

SignalR显示已经可在单台机器上扩展至上万个连接,同时可以通过service bus和redis 以及sql server 实现可扩展的集群部署,具体参看Microsoft ASP.NET SignalR

我们可以下载ASP.NET 2012 Fall Update安装包(http://www.microsoft.com/en-us/download/details.aspx?id=35493),安装完毕以后,就可以在 Visual Studio里看到新的项目模板。

SignalR 包括一些针对不同功能的类库,下载安装可以看到一下几个主要项目:

  • Microsoft.AspNet.SignalR – meta package (use this)
  • Microsoft.AspNet.SignalR.Client – .NET 4 and WinRT client
  • Microsoft.AspNet.SignalR.JS – The Javascript client.
  • Microsoft.AspNet.SignalR.Core – Core server package with no host implementation
  • Microsoft.AspNet.SignalR.Hosting.AspNet – The ASP.NET host
  • Microsoft.AspNet.SignalR.Hosting.Utils – utilities for signalr (signalr.exe)
  • Microsoft.AspNet.SignalR.Redis – Redis message bus implementation
  • Microsoft.AspNet.SignalR.ServiceBus – Service bus message bus implementation

GItHUb上的地址:https://github.com/SignalR/SignalR

安装也很简单,另外一种方式可以通过控制台安装:To install Microsoft ASP.NET SignalR, run the following command in the Package Manager Console

PM> Install-Package Microsoft.AspNet.SignalR

ASP.NET SignalR 目前还在持续不断更新完善中,这个框架目前还没正式集成到.NET框架里。不过作为Web开发,实时同时,客户端和服务端双工通信这也是非常重要的需求。无论是传统Web网站还是移动平台,这个框架应该都会对我们的开发工作带来很大便利。

本文分享自微信公众号 - 我为Net狂(dotNetCrazy),作者:朱永光

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-02-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 初识SignalR~仿QQ即时聊天(群发,单发)(Web,WPF等Demo演示)【上】

    官方demo:http://www.asp.net/signalr/overview/getting-started/tutorial-getting-star...

    逸鹏
  • 维护索引(3)——通过重建索引提高性能

    前言: 重建一个索引只是在内部删除并重建索引,使得碎片消失、统计信息更新、物理顺序重新排列组织。它会压缩数据页,按照填充因子填充适当的数据。如果有需要,也会添加...

    逸鹏
  • 04. Web大前端时代之:HTML5+CSS3入门系列~Input新增类型

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 1.tel:输入...

    逸鹏
  • Microsoft ASP.NET SignalR

    SignalR类似与JavaScript实时框架,如Socket.IO。SignalR能够完成客户端向服务器的异步通信,并同时支持服务器向浏览器客户端推送事件。...

    张善友
  • 初识SignalR~仿QQ即时聊天(群发,单发)(Web,WPF等Demo演示)【上】

    官方demo:http://www.asp.net/signalr/overview/getting-started/tutorial-getting-star...

    逸鹏
  • 干货 | 10分钟带你全面掌握branch and bound(分支定界)算法-概念篇

    之前一直做启发式算法,最近突然对精确算法感兴趣了。但是这玩意儿说实话是真的难,刚好boss又叫我学学column generation求解VRP相关的内容。

    短短的路走走停停
  • 渗透痕迹分析随笔

    网上,关于入侵痕迹分析的文章很多,在此将个人工作中常用的一些方法技巧(班门弄斧了),以及爬过的坑总结如下(当然,其中有些方法也是从各位前辈的经验中学习的)。入侵...

    FB客服
  • C# ArrayList 与 string、string[] 的转换

    1、ArrarList 转换为 string[]   ArrayList list = new ArrayList();   list.Add("aaa"); ...

    Java中文社群_老王
  • 小型ERP调研:云端转型已成必然 快慢将决定谁最后胜出

    实施服务 移动信息化研究中心发现,在实施服务方面,小型ERP的实施并没有大中型ERP那样繁琐,由于产品较为简单小巧,实施比较快捷,用户对于实施质量表示没有太...

    人称T客
  • [Go] golang获取http中的get传递的参数

    此处备注一下 , 通过Request实例中获取URL , 然后调用URL的方法就可以了

    陶士涵

扫码关注云+社区

领取腾讯云代金券