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


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

    标签(空格分隔): SignalR


    前言

    本章我们将学习将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,如图所示

    创建服务

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

  • 相关阅读:
    2019icpc上海站 打星体验,首次感想 D K代码
    P1983 车站分级 思维+拓扑排序
    POJ 2352 Stars Treap & 线段树
    POJ 2761 Feed the dogs 基础Treap
    POJ 1442 Black Box 基础Treap
    CodeForces R285 Div2
    HDU 5145 NPY and girls 莫队算法
    2014 上海赛区小结
    2014 牡丹江赛区总结
    HDU 5125 Magic Ball DP+树状数组
  • 原文地址:https://www.cnblogs.com/Jack-Blog/p/5079433.html
Copyright © 2020-2023  润新知