这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第六篇: SignalR 自托管主机

原文: SignalR Self-Host

PS.前面的那篇在MVC5上使用SignalR跳过了……MVC5跟HTML的实现完全一样,只是将HTML的脚本放在View里面了,这里就跳过了。有兴趣的同学可以自己 去看 。

概述

SignalR服务器通常在IIS的ASP.NET应用程序上承载,但它也可以使用自托管库来作为自托管的主机(就像控制台应用或者Windows服务那样)。与SignalR 2.0一样,自托管库是基于.Net开放式Web接口(OWIN)来构建的。OWIN定义了.Net Web服务器和Web应用程序之间的抽象接口,将Web应用程序从服务器上解耦,使得OWIN可以在IIS之外建立自托管主机。

为什么不在IIS中托管?参考以下理由:

  • IIS不可用或无法使用IIS的环境,比如无IIS的服务器场。
  • 考虑到性能,需要避免IIS的额外开销。
  • SignalR运行在Windows服务或Azure工作角色,或被用于其他现存的应用程序。

如果为了性能考虑而是用SignalR自托管主机,建议对IIS中承载的应用程序进行测试,以确定性能确实得到了提高。

创建服务器

在本教程中,您将创建托管在控制台应用程序中的服务器,当然将其承载在Windows服务及Azure工作角色中也是可行的。

1.以管理员权限运行VS2013,新建一个控制台应用程序,命名为"SignalRSelfHost"并确定。

2.打开程序包管理器控制台。

3.在控制台中输入以下命令:

Install-Package Microsoft.AspNet.SignalR.SelfHost

此命令将SignalR自托管库添加到项目中。

4.继续在控制台中输入以下命令:

Install-Package Microsoft.Owin.Cors

此命令将OWIN核心库添加到项目中,因为SignalR主机与网页客户端之间在不同的域中运行,该库将用于跨域支持。由于SignalR服务和Web客户端运行在不同的端口上,这意味如果想在这些组件间进行通讯,则必须启动这些组件中的跨域功能。 
5.替换Program.cs中的代码:

 1 using System;
 2 using Microsoft.AspNet.SignalR;
 3 using Microsoft.Owin.Hosting;
 4 using Owin;
 5 using Microsoft.Owin.Cors;
 6
 7 namespace SignalRSelfHost
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             // This will *ONLY* bind to localhost, if you want to bind to all addresses
14             // use http://*:8080 to bind to all addresses.
15             // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx
16             // for more information.
17             string url = "http://localhost:8080";
18             using (WebApp.Start(url))
19             {
20                 Console.WriteLine("Server running on {0}", url);
21                 Console.ReadLine();
22             }
23         }
24     }
25     class Startup
26     {
27         public void Configuration(IAppBuilder app)
28         {
29             app.UseCors(CorsOptions.AllowAll);
30             app.MapSignalR();
31         }
32     }
33     public class MyHub : Hub
34     {
35         public void Send(string name, string message)
36         {
37             Clients.All.addMessage(name, message);
38         }
39     }
40 }

上面的代码包含了三个类:

  • Program,包含Main方法定义执行的主路径。在该方法中,指定了本地主机的8080端口用于启动该Web应用程序。当然你也可以实现SSL来进一步提高安全。参见How to: Configure a Port with an SSL Certificate 。
  • Startup,包含了SignalR服务器的配置(本教程中,仅使用了UseCors配置类),并且调用MapSignalR,为集线器建立路由映射。
  • MyHub,SignalR的集线器实现,用于提供客户端服务。这个类还包含一个方法:Send,用于将接收到的客户端消息广播给所有其他已连接的客户端。

6.编译并运行,服务器的地址将显示在控制台窗口中。

7.如果执行失败,除了发生 System.Reflection.TargetInvocationException错误,你需要以管理员权限重新运行VS2013并执行。

8.在进行下一步前,关闭控制台应用程序。

使用JavaScript客户端访问服务器

在本节中,您将使用同入门教程一致的JS客户端。我们只进行一项修改,即定义集线器的URL,作为自托管主机,服务器并不一定在相同的URL作为连接地址(由于反向代理及负载平衡),所以URL需要显示定义。

1.在解决方案资源管理器中,添加ASP.NET Web应用程序,命名为"JavascriptClient",然后确定。

2.以空模板创建项目。

3.在包管理器控制台中,在默认项目的下拉列表中选择“JavascriptClient”项目,并执行以下命令:

Install-Package Microsoft.AspNet.SignalR.JS

此命令安装客户端所需要的SignalR及jQuery库。

4.添加一个新的HTML页面,命名为Default.HTML。

5.用下面的代码替换HTML中的内容,同样需要确认代码中脚本引用的版本路径是否一致。

 1 DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>SignalR Simple Chattitle>
 5     <style type="text/css">
 6         .container { 7             background-color: #99CCFF;
 8             border: thick solid #808080;
 9             padding: 20px;
10             margin: 20px;
11         }
12     style>
13 head>
14 <body>
15     <div class="container">
16         <input type="text" id="message" />
17         <input type="button" id="sendmessage" value="Send" />
18         <input type="hidden" id="displayname" />
19         <ul id="discussion">ul>
20     div>
21
22
23     <script src="Scripts/jquery-1.6.4.min.js">script>
24
25     <script src="Scripts/jquery.signalR-2.0.2.min.js">script>
26
27     <script src="http://localhost:8080/signalr/hubs">script>
28
29     <script type="text/javascript">
30         $(function () {31         //Set the hubs URL for the connection
32             $.connection.hub.url = "http://localhost:8080/signalr";
33
34             // Declare a proxy to reference the hub.
35             var chat = $.connection.myHub;
36
37             // Create a function that the hub can call to broadcast messages.
38             chat.client.addMessage = function (name, message) {39                 // Html encode display name and message.
40                 var encodedName = $('
'
).text(name).html();41 var encodedMsg = $('

'
).text(message).html();42 // Add the message to the page.43 $('#discussion').append('

  • '
  • + encodedName 44 + ': ' + encodedMsg + ''); 45 }; 46 // Get the user name and store it to prepend to messages. 47 $('#displayname').val(prompt('Enter your name:', '')); 48 // Set initial focus to message input box. 49 $('#message').focus(); 50 // Start the connection. 51 $.connection.hub.start().done(function () {52 $('#sendmessage').click(function () {53 // Call the Send method on the hub. 54 chat.server.send($('#displayname').val(), $('#message').val()); 55 // Clear text box and reset focus for next comment. 56 $('#message').val('').focus(); 57 }); 58 }); 59 }); 60 script> 61 body> 62 html> 63

注意此行代码声明了SignalR的基础连接URL。

$.connection.hub.url = "http://localhost:8080/signalr";

6.在解决方案上右击,设置多个启动项目为启动。

7.在Default.Html上右击,选择设为起始页。

8.运行该项目,将弹出控制台服务器及Web页面,如果Web页面在控制台服务器启动前就执行,你需要重新刷新一次页面。

9.你可以输入用户名,打开多个浏览器来进行多用户的聊天室测试了。

作者: 帕特里克·弗莱彻   -帕特里克·弗莱彻是ASP.NET开发团队的程序员,作家,目前正在SignalR项目工作。

SignalR 2.0 系列: SignalR 自托管主机相关推荐

  1. 第四章SignalR自托管主机

    第四章SignalR自托管主机 SignalR服务器通常在IIS的Asp.Net应用程序上承载,但它也可以使用自托管库来作为自托管的主机来运行(就像控制台应用程序或Windows服务那样)与Signa ...

  2. 用SignalR 2.0开发客服系统[系列3:实现点对点通讯]

    用SignalR 2.0开发客服系统[系列3:实现点对点通讯] 原文:用SignalR 2.0开发客服系统[系列3:实现点对点通讯] 前言 目录: 用SignalR 2.0开发客服系统[系列1:实现群 ...

  3. 用SignalR 2.0开发客服系统[系列5:使用SignalR的中文简体语言包和其他技术点]

    原文:用SignalR 2.0开发客服系统[系列5:使用SignalR的中文简体语言包和其他技术点] 前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通 ...

  4. 在ASP.NET CORE 2.0使用SignalR技术

    一.前言 上次讲SignalR还是在<在ASP.NET Core下使用SignalR技术>文章中提到,ASP.NET Core 1.x.x 版本发布中并没有包含SignalR技术和开发计划 ...

  5. SignalR 2.0

    SignalR 2.0 最近整理了SignalR2.0 部分知识点,原文翻译,由于自己是土鳖,翻译得不好的地方,欢迎指正!仅供各位初学者学习! 第一节. 入门ASP.NET SignalR2.0 1. ...

  6. vSphere 5.0系列之二 vSphere Client的安装

    1.安装包如下载所示,解压之后,可选择安装不同语言 2.开始安装 3.专利说明 4.直接同意 5.两个都要填写 6.安装目录自己可以更改 7.单击安装 8.开始安装的过程 9.到这一步已基本安装完成了 ...

  7. 阿里云服务器上单机部署大数据开发环境(hadoop2.6-cdh5.8.0系列)

    概述 之前在阿里云买的学生版服务器,闲着也是浪费,为了平常学习使用,决定在一台服务器上搭建一个伪分布式的开发环境.之前用三台虚拟机部署过集群,时间长了怕忘,现在升级各个版本重新部署,记下来方便以后查看 ...

  8. LXD 2.0系列之一:LXD简介

    本文讲的是LXD 2.0系列之一:LXD简介, [编者的话] 第三方调查报告 显示LXD有潜质成为一款受欢迎的第三方容器管理工具.本文是LXD核心维护者.加拿大程序员Stéphane Graber有关 ...

  9. 科技新品 | 索尼全画幅小型摄像机FX3;三星电子5000万像素图像传感器;艾比森3.0系列标准尺寸会议屏...

    "科技新产品动态"栏目把新鲜的具有代表性的科学产品带到您眼前,涉及消费电子,半导体.服务器.智能家电等众多品类,提供图片和简单的文字介绍. 索尼发布全画幅小型摄像机FX3:艾比森全 ...

最新文章

  1. 带修莫队 ---- P1903 [国家集训队]数颜色 / 维护队列 带修莫队模板
  2. [20160725]MyComparableTest
  3. 新手学习Linux——rsync+shell脚本完成自动化备份
  4. input ios问题 小程序_小程序可以解决哪些问题??
  5. 开奖及送书|《Vue.js权威指南》
  6. 企业五大模式,多看两遍你就懂了
  7. VB计算文本文件的行数
  8. RHEL7.0 防火墙入门
  9. docker启动mysql容器报错driver failed programming external connectivity on endpoint mysq
  10. IDEA汉化包安装和卸载
  11. Spring核心组件分析
  12. matlab 数据导入
  13. 即兴演讲、怎么锻炼即兴演讲能力、一些即兴演讲的模板
  14. Duality对偶学习笔记(第一课时)
  15. 篮球记分牌c语言程序和报告,跪求:设计一款篮球记分牌,包括C语言程序和proteus的仿真图,最好附带设计报告.。邮箱liuzhonghuaol@126.com。...
  16. Zepeto正加速摆脱“捏脸”应用的传统印象,成为亚洲最大虚拟世界平台
  17. 织梦DEDE正则查找批量替换数据库自定义内容
  18. 课程设计-商店管理系统(一)----前端页面的制作(一)
  19. uva 714 Copying Books(二分法求最大值最小化)
  20. XYCMS搬家公司建站系统 v3.8

热门文章

  1. 地理大圆距离 C语言,通过经纬度计算两点之间的距离
  2. Hadoop基础【HDFS、Yarn、MapReduce框架概述、框架的搭建】
  3. 2022年金属非金属矿山(地下矿山)安全管理人员特种作业证考试题库模拟考试平台操作
  4. 我的安全之路——Web安全篇
  5. 2011分区联赛模拟试题 电子眼【树形DP】
  6. cloc JAVA文件_Cloc简介
  7. Sketch 选错语言怎么办丨使用教程
  8. 电子信息工程专业课程分类介绍
  9. LaTeX 常用宏包(转载)
  10. 系统可靠性、安全性及系统性能评测