SignalR 2.0入门
概述
本教程介绍了那么 SignalR 发展展示了如何构建一个简单的基于浏览器的聊天应用程序。你会那么 SignalR 库添加到一个空的 ASP.NET web 应用程序、 创建一个集线器类将消息发送到客户端,和创建一个允许用户发送和接收聊天消息的 HTML 页面。演示如何在 MVC 5 创建一个聊天应用程序使用的 MVC 视图的类似教程,请参阅入门那么 SignalR 2 和 MVC 5.
注︰本教程演示如何创建那么 SignalR 应用程序版本 2 中。那么 SignalR 之间的更改的详细信息 1.x 和 2,请参阅升级那么 SignalR 1.x 项目和视觉工作室 2013年发行说明.
那么 SignalR 是开源.NET 库,用于构建 web 应用程序需要实时用户交互或实时数据更新。例子包括社交应用程序、 多用户游戏、 业务协作和新闻,天气或财务更新的应用程序。这些通常被称为实时应用程序。
那么 SignalR 简化了构建实时应用程序的过程。它包括 ASP.NET 服务器库和 JavaScript 客户端库,以使它更易于管理客户端-服务器连接并将内容更新推送到客户端。你可以那么 SignalR 库添加到现有的 ASP.NET 应用程序以获得实时功能。
本教程演示下面的那么 SignalR 开发任务︰
- 将那么 SignalR 库添加到 ASP.NET web 应用程序。
- 创建一个集线器类,以将内容推送到客户端。
- 创建浩然启动类,以将应用程序配置。
- 使用 web 页中的那么 SignalR jQuery 库发送邮件并显示更新从集线器。
下面的屏幕快照显示在浏览器中运行的聊天应用程序。每个新用户可以发表评论,并查看用户加入聊天后添加注释。

各节︰
设置项目
本节演示如何使用 Visual Studio 2013 和那么版本 2 SignalR 来创建空的 ASP.NET web 应用程序,添加那么 SignalR,并创建聊天应用程序。
先决条件︰
- 视觉工作室 2013 年。如果你没有 Visual Studio,请参见ASP.NET 下载要免费视觉工作室 2013年快递发展的工具。
下列步骤将使用 Visual Studio 2013 创建 ASP.NET 空 Web 应用程序并添加那么 SignalR 库︰
在 Visual Studio 中创建一个 ASP.NET Web 应用程序。

在新的 ASP.NET 项目窗口中,保留空选定,然后单击创建项目.

在解决方案资源管理器中,右键单击项目,选择添加|那么 SignalR 集线器类 (v2)。将类命名为ChatHub.cs并将其添加到项目。此步骤将创建ChatHub类,并向项目中添加一组脚本文件和支持那么 SignalR 的程序集引用。
注︰你也可以向项目添加那么 SignalR 通过打开工具 |库包管理器 |程序包管理器控制台和运行命令︰
install-package Microsoft.AspNet.SignalR如果你使用控制台来添加那么 SignalR,那么 SignalR 集线器类作为一个单独的步骤之后创建您添加那么 SignalR。
注︰如果您使用的 Visual Studio 2012,那么 SignalR 集线器类 (v2)模板将不可用。您可以添加一个名为
ChatHub相反的普通类。在解决方案资源管理器中,展开脚本节点。JQuery 和那么 SignalR 脚本库是在项目中可见。
新的ChatHub类中的代码替换为下面的代码。
using System;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChat
{
public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the broadcastMessage method to update clients.
Clients.All.broadcastMessage(name, message);
}
}
}在解决方案资源管理器中,右键单击项目,然后单击添加|欧文真启动类。
Startup新类的名称并单击确定。注︰如果您使用的 Visual Studio 2012,浩然启动类模板将不可用。您可以添加一个名为
Startup相反的普通类。更改为以下内容的新的启动类。
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(SignalRChat.Startup))]
namespace SignalRChat
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
}在解决方案资源管理器中,右键单击项目,然后单击添加|HTML 页。新页
index.html名称.在解决方案资源管理器中,右键单击 HTML 页面,您只需创建并单击设置为起始页.
在 HTML 页面中的默认代码替换为下面的代码。
注︰ 版本那么 SignalR 脚本可以通过软件包管理器进行安装。验证下面的脚本引用对应的版本 (他们会不同,如果你添加了那么 SignalR 使用 NuGet,而不是添加一个集线器。) 项目中的脚本文件
<!DOCTYPE html>
<html>
<head>
<title>SignalR Simple Chat</title>
<style type="text/css">
.container {
background-color: #99CCFF;
border: thick solid #808080;
padding: 20px;
margin: 20px;
}
</style>
</head>
<body>
<div class="container">
<input type="text" id="message" />
<input type="button" id="sendmessage" value="Send" />
<input type="hidden" id="displayname" />
<ul id="discussion">
</ul>
</div>
<!--Script references. -->
<!--Reference the jQuery library. -->
<script src="Scripts/jquery-1.6.4.min.js" ></script>
<!--Reference the SignalR library. -->
<script src="Scripts/jquery.signalR-2.1.0.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="signalr/hubs"></script>
<!--Add script to update the page and send messages.-->
<script type="text/javascript">
$(function () {
// Declare a proxy to reference the hub.
var chat = $.connection.chatHub;
// Create a function that the hub can call to broadcast messages.
chat.client.broadcastMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>: ' + encodedMsg + '</li>');
};
// Get the user name and store it to prepend to messages.
$('#displayname').val(prompt('Enter your name:', ''));
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
</script>
</body>
</html>全部保存项目。
运行示例
按 F5 键在调试模式下运行该项目。在 HTML 页面加载在一个浏览器实例和用户名称的提示。

输入用户的名称。
- 从浏览器的地址行中复制的 URL 和用于打开两个浏览器实例。在每个浏览器实例,输入一个唯一的用户名称。
在每个浏览器实例中添加注释并单击发送。评论应该在所有的浏览器实例中显示。
注︰这个简单的聊天应用程序不维护服务器上的讨论范围。集线器广播于当前所有用户的评论。随后加入聊天的用户将看到消息添加时间从他们加入。
下面的屏幕快照显示了运行在三个浏览器实例,所有的一切都更新时的一个实例将消息发送的聊天应用程序︰

在解决方案资源管理器,检查脚本文档节点运行的应用程序。还有一个名为枢纽,那么 SignalR 库在运行时动态生成的脚本文件。此文件管理 jQuery 脚本和服务器端代码之间的通信。

检查代码
那么 SignalR 聊天应用程序演示了两个基本的那么 SignalR 开发任务︰ 创建一个枢纽作为主要协调对象在服务器上,并使用那么 SignalR jQuery 库发送和接收邮件。
那么 SignalR 集线器
在代码示例中的ChatHub从Microsoft.AspNet.SignalR.Hub类派生的类。从集线器类派生是一个有用的方式来建立一个应用程序,那么 SignalR。你可以在您的集线器类上创建公共方法,然后通过调用他们从 web 页中的脚本访问这些方法。
在聊天代码中,客户端调用ChatHub.Send方法将发送一封新邮件。集线器反过来将消息发送到所有客户端通过调用Clients.All.broadcastMessage.
Send方法演示中心的几个概念︰
- 集线器上声明公共方法,以便客户端可以调用它们。
- 使用Microsoft.AspNet.SignalR.Hub.Clients动态属性来访问所有客户端连接到该集线器。
调用在客户端 (如
broadcastMessage函数) 上的一个函数来更新客户端。public class ChatHub : Hub
{
public void Send(string name, string message)
{
// Call the broadcastMessage method to update clients.
Clients.All.broadcastMessage(name, message);
}
}
那么 SignalR 和 jQuery
HTML 页中的代码示例演示如何使用那么 SignalR jQuery 库,那么 SignalR 集线器与沟通。在代码中的基本任务宣布代理引用的枢纽,声明了一个函数,该服务器可以调用内容推送到客户端,并开始将消息发送到集线器的连接。
下面的代码声明对枢纽代理的引用。
var chat = $.connection.chatHub;
注︰ 在 JavaScript 对服务器类和其成员的引用是在 camel 大小写。该代码示例作为chatHub引用在 JavaScript 中的 C# ChatHub类.
下面的代码是如何创建一个回调函数在脚本中。在服务器上的集线器类调用这个函数将内容更新推送到每个客户端。这两条线,HTML 编码内容时,才显示它是可选的显示简单的方式来防止脚本注入。
chat.client.broadcastMessage = function (name, message) {
// Html encode display name and message.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
// Add the message to the page.
$('#discussion').append('<li><strong>' + encodedName
+ '</strong>: ' + encodedMsg + '</li>');
};
下面的代码演示如何用集线器打开一个连接。代码启动连接,然后将它传递一个函数来处理 HTML 页中的发送按钮上的单击事件。
注意︰ 此方法可确保该事件处理程序执行之前建立连接。
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
接下来的步骤
你学会了,那么 SignalR 是一个用于构建实时 web 应用程序框架。您还学习了几个那么 SignalR 开发任务︰ 如何将那么 SignalR 添加到 ASP.NET 应用程序、 如何创建一个集线器类,以及如何发送和接收邮件从集线器。
有关如何部署到 Azure 的示例那么 SignalR 应用程序的演练,请参阅使用那么 SignalR 与 Web 应用程序在 Azure 应用程序服务。有关如何将 Visual Studio web 项目部署到 Windows Azure Web 站点的详细信息,请参阅创建 ASP.NET web 应用程序在 Azure 应用程序服务.
若要了解更多高级那么 SignalR 的发展概念,请访问下面的网站,那么 SignalR 源代码和资源︰
SignalR 2.0入门的更多相关文章
- SignalR 2.0 入门与提高
SignalR 2.0 入门与提高 SignalR 2.0 最近整理了SignalR2.0 部分知识点,原文翻译,由于自己是土鳖,翻译得不好的地方,欢迎指正!仅供各位初学者学习! 第一节. 入门ASP ...
- ASP.NET SignalR 2.0入门指南
ASP.NET SignalR 2.0入门指南 介绍SignalR ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程.实时Web功 ...
- SignalR 2.0 入门与提高 转载https://www.cnblogs.com/vance/p/SignalR.html
SignalR 2.0 最近整理了SignalR2.0 部分知识点,原文翻译,由于自己是土鳖,翻译得不好的地方,欢迎指正!仅供各位初学者学习! 第一节. 入门ASP.NET SignalR2.0 1. ...
- [渣译文] SignalR 2.0 系列:SignalR的高频实时通讯
原文:[渣译文] SignalR 2.0 系列:SignalR的高频实时通讯 英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.N ...
- [渣译文] SignalR 2.0 系列: SignalR 自托管主机
原文:[渣译文] SignalR 2.0 系列: SignalR 自托管主机 英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.N ...
- 推荐:【视频教程】ASP.NET Core 3.0 入门
墙裂推荐了,免费,通俗易懂,唯一可惜的就是不是我录的,更可惜的是人家录制完了快半年了我还没看完... 版权归原作者所有,建议新手还是边看边实践吧,要不然过完一遍发现自己啥也没学会,不要眼高手低 [视频 ...
- ASP.NET Core 3.0 入门
原文:ASP.NET Core 3.0 入门 课程简介 与2.x相比发生的一些变化,项目结构.Blazor.SignalR.gRPC等 课程预计结构 ASP.NET Core 3.0项目架构简介 AS ...
- 用SignalR 2.0开发客服系统[系列2:实现聊天室]
前言 交流群:195866844 上周发表了 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 这篇文章,得到了很多帮助和鼓励,小弟在此真心的感谢大家的支持.. 这周继续系列2,实现聊天室 ...
- 用SignalR 2.0开发客服系统[系列3:实现点对点通讯]
前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 真的很感谢大家的支持,今天发表系列3 ...
随机推荐
- ubuntu 如何在recovery模式修改root密码
今天遇到一个问题, 前提1: ubuntu系统的root密码我一直没有设定 前提2: ubuntu初始创建的sudo用户不知道怎么移除sudo权限用户了. 下面就精彩了, 首先没有root密码,你不 ...
- 亦步亦趋在CentOS 6.4下安装Oracle 11gR2(x64)
安装前须知: 内存(RAM)的最小要求是 1GB,建议 2GB 及以上. 虚拟内存 swap 建议:内存为 1GB~2GB 时建议swap大小为内存大小的 1.5 倍:内存为 2GB~16GB 时建议 ...
- PI-安装SoapUI on Windows
SoapUI是测试webservice连通性的工具,请见博文:http://www.dekevin.com/?p=1807 当你下载好了SOAPUI的安装程序之后,就可以进行程序的安装了,怎么来进行S ...
- ZOJ 3633 Alice's present 倍增 区间查询最大值
Alice's present Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/vi ...
- iOS 2D绘图详解(Quartz 2D)之概述
前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView,虽然对CALayer及其子类很熟练,但是对Quartz 2D这个强大的框架仍然概念模棱两可.于是,决定学习下,暂定7篇文 ...
- 【XS128】Link error L1822 symbol _FADD / _FSUB/ _FDIV/ _FMUL.....错误解决的方法
转载请注明出处 因为阅历有限,篇幅不周之处还望指出,谢谢 假设方法确实奏效,请一定回复点赞哦,给后来人也是一种帮助,谢谢! 这是飞思卡尔 XS128平台比較常见的LINK错误. 可是要解决起来也比較头 ...
- 【ZZ】如何选择适合自己项目的编程语言
http://news.cnblogs.com/n/506473/ 与操作系统一样,在办公室软件套装和计算机中也具有各种计算机语言.存在这种多样性的原因与其它地方的多样性一样—-因为没有单一的解决方法 ...
- 1043. Is It a Binary Search Tree (25)
the problem is from pat,which website is http://pat.zju.edu.cn/contests/pat-a-practise/1043 and the ...
- debian7安装oracle11g
1,安装必须包 apt-get install gcc g++ make binutils libc6 libc6-dev libstdc++6 libstdc++5 rpm gawk alien ...
- 最新cocoapods安装流程,安装过程中遇到的问题及解决方法
最近重新安装了一次cocoapods,参考的安装流程:http://blog.csdn.net/showhilllee/article/details/38398119/ 但是现在的cocoapods ...