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

简介: 原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序前言 部署在控制台应用程序安装自托管包 安装跨域包 winform客户端设计界面 连接 完整实现效果 windows服务创建服务 安装服务 启动服务 连接服务 结束语 源码下载 参考文献 前言本章我们将学习将signalr服务托管在非web应用程序。
原文: 一步一步学习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 下载

目录
相关文章
|
1月前
|
缓存 关系型数据库 API
后端开发:构建高效、可扩展的Web应用程序的关键
后端开发:构建高效、可扩展的Web应用程序的关键
21 0
|
6天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
14 0
|
18天前
|
安全 前端开发 Java
Java Web开发知识点学习总结
Java Web开发涉及Java基础、Servlet、JSP、数据库操作(SQL+JDBC)、MVC设计模式、Spring框架、Hibernate ORM、Web服务(SOAP&RESTful)、安全认证(HTTP Basic/Digest/OAuth)及性能优化(缓存、异步、负载均衡)。
17 3
|
25天前
|
前端开发 JavaScript 数据管理
描述一个使用Python开发Web应用程序的实际项目经验,包括所使用的框架和技术栈。
使用Flask开发Web应用,结合SQLite、Flask-SQLAlchemy进行数据管理,HTML/CSS/JS(Bootstrap和jQuery)构建前端。通过Flask路由处理用户请求,模块化代码提高可维护性。unittest进行测试,开发阶段用内置服务器,生产环境可选WSGI服务器或容器化部署。实现了用户注册登录和数据管理功能,展示Python Web开发的灵活性和效率。
14 4
|
1月前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
1月前
|
缓存 监控 前端开发
如何优化 Python WEB 应用程序的性能?
【2月更文挑战第27天】【2月更文挑战第93篇】如何优化 Python WEB 应用程序的性能?
|
1月前
|
SQL 安全 测试技术
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
15 0
|
1月前
|
存储 安全 数据安全/隐私保护
什么是 Web 应用程序的会话管理?如何在 Python 中实现?
什么是 Web 应用程序的会话管理?如何在 Python 中实现?
12 2
|
1月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
|
1月前
|
Web App开发 前端开发 测试技术
Web应用程序测试工具Selenium用法详解
Web应用程序测试工具Selenium用法详解
37 0