在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)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏施炯的IoT开发专栏

Windows Phone 8 API一览

    Windows Phone 7平台不支持Native语言的开发,这困扰了许多游戏和底层应用的开发者。Windows Phone 8 SDK的推出,改善了...

17980
来自专栏张善友的专栏

Silverlight 中的 CoreCLR

Silverlight 2  包含一个 CLR,但并不是其他 .NET 应用程序和程序集使用的 CLR. Silverlight CLR 也称为 CoreCLR...

21250
来自专栏木宛城主

厚积薄发,拥抱 .NET 2016

厚积薄发这个词是高三英语老师在高考前写在黑板上,高中三年努力这么久,是时候迎面而上,冲刺向前。所以,一想到.NET 2016,脑海里蹦出的第一个词就是它。 ....

428150
来自专栏葡萄城控件技术团队

Xamarin 技术全解析

Xamarin 是一套基于C#语言的跨平台移动应用开发工具,今年2月份微软宣布收购Xamarin,而后在4月份进行的Build大会上微软宣布将会在各个版本的Vi...

56970
来自专栏张善友的专栏

ASP.NET MVC 2 转换工具

似水流年报告了ASP.NET MVC 2 正式发布,那么我们有许多ASP.NET MVC 1.0的程序需要移植到2.0怎么办呢?Eilon Lipton 已经发...

20190
来自专栏葡萄城控件技术团队

ASP.NET Core: 全新的ASP.NET !

背景 最新版本的 ASP.NET 叫做 ASP.NET Core (也被称为 ASP.NET 5)   它颠覆了过去的 ASP.NET。 什么是 ASP.NET...

485100
来自专栏图形学与OpenGL

实验0 安装GLUT包与创建工程

OpenGL是一个非常优秀的图形软件接口。OpenGL官方网站(英文)http://www.opengl.org/

9910
来自专栏Ken的杂谈

博客从ASP.NET 迁移到了ASP.NET Core 2.0

在迁移之前,本站点是基于 ASP.NET MVC 4构建且部署在Linux+Mono环境下,Web服务器使用的是Jexus,在 .NET Core出来之前,这是...

36030
来自专栏张善友的专栏

CentOS 7.2下安装Mono 5.0

微软Build2017大会期间.NET领域的.NET core之外,就是Visual Studio For Mac,大家都知道Visual Studio For...

22950
来自专栏葡萄城控件技术团队

Silverlight 结构分析

Silverlight是微软提供的一种Web前端应用程序开发框架,是微软RIA的主要应用程序开发平台。Silverlight以浏览器的插件方式,提供丰富的多媒体...

19780

扫码关注云+社区

领取腾讯云代金券