一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序一步一步学习SignalR进行实时通信_9_托管在非Web应用程序前言部署在控制台应用程序安装自托管包安装跨域包winform客户端设计界面连接完整实现效果windows服务创建服务安装服务启动服务连接服务结束语源码下载参考文献

前言本章我们将学习将signalr服务托管在非web应用程序。之前我们一直是通过IIS部署signalR服务,今天我们的服务将要完全摆脱IIS的约束。在某种情况下可能无法用IIS部署服务,或者我们并不需要重量级的IIS进行部署,直接部署在控制台应用程序中更加方便简单,获取还有其他各种各样的原因。

由于有owin提供的解耦功能我们可以不在修改代码的情况下部署到其他地方。只需要安装一个包:Microsoft.Owin.Host .HttpListener即可。(之前在web上部署的时候我们安装的是Microsoft.Owin.Host.SystemWeb)

这个包可以提供自托管的功能,打开一个端口等待http请求。

接下来我们就是先将signalR部署在控制台程序上,以及windows服务中。

部署在控制台应用程序

安装自托管包首先我们先在nuget命令行中输入install-package Microsoft.aspNet.SignalR.SelfHost进行安装

安装好后可以发现引用大致如图所示

[flash=500,400]http://s1.knowsky.com/20160211/hzdaeblxl4j45.png[/flash]

最主要的差别是这两处

[flash=500,400]http://s1.knowsky.com/20160211/spwymj1c45l46.png[/flash]

安装完后再packages文件夹中会有SelfHost文件夹里面有个readme.txt文件,有简单使用说明,如下图所示:

[flash=500,400]http://s1.knowsky.com/20160211/a4wlhggu32547.png[/flash]

[flash=500,400]http://s1.knowsky.com/20160211/0qiyak2vp0q50.png[/flash]

其中包括了如何配置和启动。

安装跨域包根据要请我们新建一个Startup文件,在里面输入代码,同时我们的控制台仅仅是服务,想要其他程序能访问到我们我们必须要开启跨域,通过命令Install-Package Microsoft.Owin.Cors进行安装即可,然后我们就做相应的配置。

[flash=500,400]http://s1.knowsky.com/20160211/s21qfvefcqb51.png[/flash]

我们的相关配置已经完成,和在web部署几乎一模一样,处理安装的组建略有差别。

接下来我们创建一个Hub。

[flash=500,400]http://s1.knowsky.com/20160211/g5fu2jryp3j52.png[/flash]

服务端有一个计算加法的服务

服务端就搭建好了,现在我们需要创建一个客户端,客户端我也不再用传统web客户端,我们创建一个winform应用程序(WPF类似)

winform客户端首先需要安装signalr .net client,之前在web应用程序作为客户端安装的是javascript client

[flash=500,400]http://s1.knowsky.com/20160211/u2fdwj5k5xo52.png[/flash]

设计界面首先搭建一个界面如图:

[flash=500,400]http://s1.knowsky.com/20160211/445vqoka1xk53.png[/flash]

点击连接时创建调用代理并连接

连接[flash=500,400]http://s1.knowsky.com/20160211/obqyt0kb3dh54.png[/flash]

连接成功弹出消息框

[flash=500,400]http://s1.knowsky.com/20160211/vbh4snywter55.png[/flash]

[flash=500,400]http://s1.knowsky.com/20160211/ucocgjlq1ai55.png[/flash]

完整实现效果[flash=500,400]http://s1.knowsky.com/20160211/yxva13swuam56.gif[/flash]

windows服务windows服务和普通的程序不一样,它有不同的生命周期。windows服务可以继承自System.ServicePRocess.ServiceBase。

创建一个新的项目选择windows service,如图所示

[flash=500,400]http://s1.knowsky.com/20160211/riijbpmo45u56.png[/flash]

创建服务

publicpartialclassSignalRService:ServiceBase{privateIDisposable_webApp;publicSignalRService(){InitializeComponent();}protectedoverridevoidOnStart(string[]args){varaddress=(args!=null&&args.Length>0)?args[0]:"http://localhost:22222";_webApp=WebApp.Start<Startup>(address);}protectedoverridevoidOnStop(){_webApp.Dispose();}}

在OnStart中开始服务,在OnStop释放

在Progarm.cs程序入口中启动服务

staticvoidMain(){ServiceBase[]ServicesToRun;ServicesToRun=newServiceBase[]{newSignalRService()};ServiceBase.Run(ServicesToRun);}

安装服务windows服务不能通过VS启动,需要在系统中安装。

[flash=500,400]http://s1.knowsky.com/20160211/vehb2ocq3iv56.png[/flash]

在服务界面右击选择Add Installe

[flash=500,400]http://s1.knowsky.com/20160211/xwz3t5th0an57.png[/flash]

会生成一个安装文件

[flash=500,400]http://s1.knowsky.com/20160211/yx5rsscaxn457.png[/flash]

serviceProcessInstaller1属性中Account选择凭证类型

[flash=500,400]http://s1.knowsky.com/20160211/m3dcdduuemy57.png[/flash]

serviceInstaller1中serviceName是windows服务中的名称

starttype是启动类型,可选择自动或手动启动

description是服务的描述

打开vs2013开发人员命令提示符(需要管理员身份进入操作)

[flash=500,400]http://s1.knowsky.com/20160211/yvrrf0vqusn57.png[/flash]

打开后进入程序目录,输入installutil [exeName]命令[exeName]包括后缀

[flash=500,400]http://s1.knowsky.com/20160211/40q1bm1zpeh58.png[/flash]

输入installutil [exeName] /u进行卸载

输入命令后回车会弹出使用的用户凭证

[flash=500,400]http://s1.knowsky.com/20160211/vivhxyyfekk58.png[/flash]

或者在安装命令后加上参数/username和/passWord

如:installutil signalrservice.exe /username=jake /password=1234

若用户凭证有误则会回滚安装,因此不用担心会出什么问题。

[flash=500,400]http://s1.knowsky.com/20160211/xce5jw1tklp58.png[/flash]

[flash=500,400]http://s1.knowsky.com/20160211/ag51duv5maz58.png[/flash]

但是试了好几次一直有误,网上查了下用户名好像需要输入全称。为了简单起见直接用本地系统登录

[flash=500,400]http://s1.knowsky.com/20160211/xjeppfuaqxa58.png[/flash]

[flash=500,400]http://s1.knowsky.com/20160211/l2lmz25rapb59.png[/flash]

重新在输入命令(无需用户密码)即可完成安装

[flash=500,400]http://s1.knowsky.com/20160211/bykmd22efvb59.png[/flash]

安装完成在服务中即可找到,

启动服务[flash=500,400]http://s1.knowsky.com/20160211/ei1voq2mfuq59.png[/flash]

输入参数点击启动即可

[flash=500,400]http://s1.knowsky.com/20160211/5pbci0wjj5i59.png[/flash]

连接服务安装好后启动客户端测试下,此服务���hub我从控制台程序复制过去,所以一模一样

[flash=500,400]http://s1.knowsky.com/20160211/ekmisn1dzcj59.png[/flash]

注意修改端口

[flash=500,400]http://s1.knowsky.com/20160211/2qqa0pqw2s000.png[/flash]

结束语今天通过简单的2个小例子讲解了如何将signalr部署在非web环境中,以及.net client如何连接signalr服务

源码下载非web signalR服务

客户端

本文发布至作业部落

参考文献SignalR Programming in Microsoftasp.netpdf 下载

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航