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

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

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


前言

本章咱们将学习将signalr服务托管在非web应用程序。以前咱们一直是经过IIS部署signalR服务,今天咱们的服务将要彻底摆脱IIS的约束。在某种状况下可能没法用IIS部署服务,或者咱们并不须要重量级的IIS进行部署,直接部署在控制台应用程序中更加方便简单,获取还有其余各类各样的缘由。
因为有owin提供的解耦功能咱们能够不在修改代码的状况下部署到其余地方。只须要安装一个包:Microsoft.Owin.Host .HttpListener便可。(以前在web上部署的时候咱们安装的是Microsoft.Owin.Host.SystemWeb
这个包能够提供自托管的功能,打开一个端口等待http请求。
接下来咱们就是先将signalR部署在控制台程序上,以及windows服务中。html

部署在控制台应用程序

安装自托管包

首先咱们先在nuget命令行中输入install-package Microsoft.AspNet.SignalR.SelfHost进行安装
安装好后能够发现引用大体如图所示

最主要的差异是这两处

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


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

安装跨域包

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

咱们的相关配置已经完成,和在web部署几乎如出一辙,处理安装的组建略有差异。
接下来咱们建立一个Hub。

服务端有一个计算加法的服务
服务端就搭建好了,如今咱们须要建立一个客户端,客户端我也再也不用传统web客户端,咱们建立一个winform应用程序(WPF相似)web

winform客户端

首先须要安装signalr .net client,以前在web应用程序做为客户端安装的是javascript client
windows

设计界面

首先搭建一个界面如图:

点击链接时建立调用代理并链接跨域

链接


链接成功弹出消息框

ide

完整实现效果

windows服务

windows服务和普通的程序不同,它有不一样的生命周期。windows服务能够继承自System.ServiceProcess.ServiceBase。
建立一个新的项目选择windows service,如图所示
post

建立服务

  
  
  
  
public partial class SignalRService : ServiceBase{ private IDisposable _webApp; public SignalRService() { InitializeComponent(); } protected override void OnStart(string[] args) { var address = (args != null && args.Length > 0) ? args[0] : "http://localhost:22222"; _webApp = WebApp.Start<Startup>(address); } protected override void OnStop() { _webApp.Dispose(); }}

在OnStart中开始服务,在OnStop释放
在Progarm.cs程序入口中启动服务学习

  
  
  
  
static void Main(){ ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new SignalRService() }; ServiceBase.Run(ServicesToRun);}

安装服务

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

在服务界面右击选择Add Installe

会生成一个安装文件

serviceProcessInstaller1属性中Account选择凭证类型

serviceInstaller1中serviceName是windows服务中的名称
starttype是启动类型,可选择自动或手动启动
description是服务的描述
打开vs2013开发人员命令提示符(须要管理员身份进入操做)

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

输入installutil [exeName] /u进行卸载
输入命令后回车会弹出使用的用户凭证
测试

或者在安装命令后加上参数/username和/password
如:installutil signalrservice.exe /username=jake /password=1234
若用户凭证有误则会回滚安装,所以不用担忧会出什么问题。


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


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

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

启动服务


输入参数点击启动便可

链接服务

安装好后启动客户端测试下,此服务���hub我从控制台程序复制过去,因此如出一辙

注意修改端口

结束语

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

源码下载

非web signalR服务
客户端

本文发布至做业部落

参考文献

SignalR Programming in Microsoft ASP.NET pdf 下载

相关文章
相关标签/搜索