首页 > Web开发 > 详细

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

时间:2015-12-28 00:49:05      阅读:277      评论:0      收藏:0      [点我收藏+]
原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

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


前言

本章我们将学习将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进行安装
安装好后可以发现引用大致如图所示
技术分享
最主要的差别是这两处
技术分享
安装完后再packages文件夹中会有SelfHost文件夹里面有个readme.txt文件,有简单使用说明,如下图所示:
技术分享
技术分享
其中包括了如何配置和启动。

安装跨域包

根据要请我们新建一个Startup文件,在里面输入代码,同时我们的控制台仅仅是服务,想要其他程序能访问到我们我们必须要开启跨域,通过命令Install-Package Microsoft.Owin.Cors进行安装即可,然后我们就做相应的配置。
技术分享
我们的相关配置已经完成,和在web部署几乎一模一样,处理安装的组建略有差别。
接下来我们创建一个Hub。
技术分享
服务端有一个计算加法的服务
服务端就搭建好了,现在我们需要创建一个客户端,客户端我也不再用传统web客户端,我们创建一个winform应用程序(WPF类似)

winform客户端

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

设计界面

首先搭建一个界面如图:
技术分享
点击连接时创建调用代理并连接

连接

技术分享
连接成功弹出消息框
技术分享
技术分享

完整实现效果

技术分享

windows服务

windows服务和普通的程序不一样,它有不同的生命周期。windows服务可以继承自System.ServiceProcess.ServiceBase。
创建一个新的项目选择windows service,如图所示
技术分享

创建服务

  1. public partial class SignalRService : ServiceBase
  2. {
  3. private IDisposable _webApp;
  4. public SignalRService()
  5. {
  6. InitializeComponent();
  7. }
  8. protected override void OnStart(string[] args)
  9. {
  10. var address = (args != null && args.Length > 0) ? args[0] :
  11. "http://localhost:22222";
  12. _webApp = WebApp.Start<Startup>(address);
  13. }
  14. protected override void OnStop()
  15. {
  16. _webApp.Dispose();
  17. }
  18. }

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

  1. static void Main()
  2. {
  3. ServiceBase[] ServicesToRun;
  4. ServicesToRun = new ServiceBase[]
  5. {
  6. new SignalRService()
  7. };
  8. ServiceBase.Run(ServicesToRun);
  9. }

安装服务

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 下载

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

原文:http://www.cnblogs.com/lonelyxmas/p/5081150.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!