(给DotNet加星标,提升.Net技能)
转自:.NET快速开发框架cnblogs.com/huyong/p/11381349.html
一、概述
我们对SignalR的概念以及SignalR的最主要的两类通信模型(Persistent
Connections与Hubs)进行了详细的对比讲解,也做了案例展示。
本篇将为大家介绍.NET特有的Self-Host自托管的应用,即以Self-Host自托管为宿主加载SignalR服务。
宿主一词我们不会陌生,它可以看作是一个基础设施,它为一些服务和功能提供最底层的支持,如你的web应用程序可以运行在iis或者apache上,而这两个东西就是web应用程序的宿主,而今天说的自主宿主SelfHost它可以自己去监听自己的服务,如你可以把一个web应用程序宿主到一个console控制台程序上,或者把一个webApi宿主到一个console或者windowService上,这都是可以的。
Self-Host的介绍我们可以参考msdn官方事例https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/self-host 这是一个wcf的事例。
SignalR常常依托于ASP.NET应用程序运行于IIS中,但它还可以自我托管(比如作为console winform、Windows service),只要我们使用self-host库就可以了。
该库向所有的SignalR 2库一样,构建于OWIN (Open Web Interface for .NET)。OWIN定义了一个在.NET web 服务端和web 应用程序的抽象。
OWIN解耦了从服务端来的web 应用程序,这使得OWIN对于子托管web应用程序于自己的进程中得以表现得很完美。
有的小伙伴可能就要问了,为什么一定要使用这种方式来托管呢?基于IIS的方式不是更简单吗?不托管于IIS的原因主要有以下方面的考虑:
我们已经构建了一个服务端程序,没有运行在IIS上,重新搭建成本太高。
IIS的方式性能开销很大。
signalR需要扩展到现有程序中,如Windows服务中等。
其他的一些原因....
二、使用Self-Host方式创建SignalR服务端
为了更简单的说明self-host托管的方式,我们用控制台应用程序来做演示。当然我们也可以自托管到Windows服务中去,如果你更希望托管到Windows服务,可以参考Self-Hosting SignalR in a Windows Service
在上一项目的基础上,我们新建一个名为:SignalRSelfHost的控制台应用程序,如下所所示:
要使用Selft-Host宿主SignalR,必须引用Microsoft.AspNet.SignalR.SelfHost包。我们在程序包管理控制台输入以下命令安装SelfHost包。
Install-Package Microsoft.AspNet.SignalR.SelfHost
要想支持跨域访问,还需要安装
Install-Package Microsoft.Owin.Cors
如果用命令的方式安装失败,我们可以用NuGet的方式安装,如下图所示。