(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记: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

在ASP.NET 5中使用SignalR的更多相关文章

  1. 在 Asp.NET MVC 中使用 SignalR 实现推送功能 [转]

    在 Asp.NET MVC 中使用 SignalR 实现推送功能 罗朝辉 ( http://blog.csdn.net/kesalin ) CC许可,转载请注明出处 一,简介 Signal 是微软支持 ...

  2. Asp.NET MVC 中使用 SignalR 实现推送功能

    一,简介Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架.它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送请 ...

  3. 在 Asp.NET MVC 中使用 SignalR 实现推送功能

    一,简介Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架.它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送请 ...

  4. asp.net core 中的SignalR与web前端进行实时通信

    一.介绍 SignalR是.net 开源库,用于构建需要实时进行用户交互和数据更新的web应用,如在线聊天,游戏,天气等实时应用程序,且简化了构建实时应用的过程,包括服务端库和js端库,继承了数种常见 ...

  5. 一、在 ASP.NET Core 中使用 SignalR

    一.介绍 SignalR 是一个用于实现实时网站的 Microsoft .NET 库.它使用多种技术来实现服务器与客户端间的双向通信,服务器可以随时将消息推送到连接的客户端. https://docs ...

  6. 在 ASP.NET Core 中使用 SignalR

    https://weblogs.asp.net/ricardoperes/signalr-in-asp-net-core 作者:Ricardo Peres 译者:oopsguy.com 介绍 Sign ...

  7. 二、在 ASP.NET Core 中使用 SignalR之类库

    一.前段代码: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="view ...

  8. [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门

    一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到SignalR技术,所以打算总结下Asp.net ...

  9. 在ASP.NET Core下使用SignalR技术

    一.前言 上次我们讲到过如何在ASP.NET Core中使用WebSocket,没有阅读过的朋友请参考 WebSocket in ASP.NET Core 文章 .这次的主角是SignalR它为我们提 ...

随机推荐

  1. 升级centos内核到最新版本

    root权限执行: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/ ...

  2. How to keep Environment Variables when Using SUDO

    The trick is to add environment variables to sudoers file via sudo visudo command and add these line ...

  3. 关于 Tomcat 的线程池的理解

    默认配置下,Tomcat 会为每个连接器创建一个绑定的线程池(最大线程数 200).在大多数情况下你不需要改这个配置(除非增大最大线程数以满足高负载需要).但是 Tomcat 喜欢在每个工作者线程的 ...

  4. IPC----哲学家就餐问题(并发与互斥)

    哲学家就餐问题描述: 5个哲学家,5个筷子.5个哲学家围坐在一张桌子上,筷子放在分别放在每个哲学家的两旁.如果所有哲学家在某个时刻同时拿起左边的筷子,那么右边的筷子就都被其他的哲学家拿了,造成大家都无 ...

  5. Pooled Allocation(池式分配)实例——Keil 内存管理

    引言:说到动态申请(Dynamic Allocation)内存的好处,学过C/C++的人可能都有体会.运行时的灵活申请自然要比编码时的猜测好的多.而在内存受限情况下这种灵活性又有特别的好处--能让我们 ...

  6. C#获取IP和主机名

    System.Net.IPAddress addr; //获取IP addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostN ...

  7. JavaScript实现字符串的contains函数

    JavaScript实现字符串的contains函数 / *  * string:原始字符串  * substr:子字符串  * isIgnoreCase:忽略大小写  * / function co ...

  8. 【leetcode】Partition List(middle)

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  9. css 自动换行 [英文、数字、中文]

    white-space:normal;overflow: auto;table-layout:fixed; word-break: break-all;

  10. HTML简历表格

    效果图 <!DOCTYPE > <html> <head> <meta charset="utf-8" /> </head&g ...