• InChatter系统之服务端的Windows服务寄宿方式(三)


    为了部署的方便,我们开发Windows服务的服务寄宿程序,这样我们的服务便可以作为系统服务,随着系统的启动和关闭而启动和关闭,而避免了其他的设置,同时在服务的终止时(如系统关闭等)能及时处理服务的关闭事件。

    一、Windows服务开发

    在解决方案中,新建一个Windows服务,如下图所示:

    打开Service服务的设计界面,右键"添加安装程序"

    右键选择"属性",打开属性侧边栏,可以修改服务的属性信息(如名称)

    修改ServiceProcessInstaller和ServiceInstaller的属性信息

       

    下面我们针对Service的OnStart和OnStop进行编码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceModel;
    using System.ServiceModel.Description;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace InChatter.Service.WSHost
    {
        public partial class InChatterService : ServiceBase
        {
            private ServiceHost _Host;
            public InChatterService()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                try
                {
                    Uri baseUri = new Uri("http://localhost:1378/InChatter");
                    _Host = new ServiceHost(typeof(Chat), baseUri);
                    NetTcpBinding binding = new NetTcpBinding();
                    binding.Security.Mode = SecurityMode.None;
                    binding.ReceiveTimeout = TimeSpan.FromHours(2);
                    _Host.AddServiceEndpoint(typeof(IChat), binding, "net.tcp://localhost:1121/InChatter");
                    _Host.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
                    _Host.Open();
                }
                catch (Exception ex)
                {
                    EventLog log = new EventLog();
                    log.Source = "InChatterService";
                    log.WriteEntry(ex.Message, EventLogEntryType.Error);
                }
            }
    
            protected override void OnStop()
            {
                if (_Host.State != CommunicationState.Closed)
                {
                    _Host.Close();
                }
            }
        }
    }

    二、Windows服务的部署

    下面给出两个服务的安装和卸载的.bat文件,大家参考

    1.Installer

    @ECHO OFF
    echo 准备安装服务
    
    REM The following directory is for .NET 4.0
    set DOTNETFX2=%SystemRoot%Microsoft.NETFrameworkv4.0.30319
    set PATH=%PATH%;%DOTNETFX2%
    echo 安装服务...
    echo ---------------------------------------------------
    InstallUtil /i InChatter.Service.WSHost.exe
    echo ---------------------------------------------------
    net start InChatterService
    pause

    其中net start 服务名

    在安装的最后过程,我们启动服务

    2.Uninstaller

    @ECHO OFF
    echo 准备卸载服务
    
    net stop InChatterService
    
    REM The following directory is for .NET 4.0
    set DOTNETFX2=%SystemRoot%Microsoft.NETFrameworkv4.0.30319
    set PATH=%PATH%;%DOTNETFX2%
    echo 卸载服务...
    echo ---------------------------------------------------
    InstallUtil /u InChatter.Service.WSHost.exe
    echo ---------------------------------------------------
    pause

    在卸载的初期,我们先关闭服务,这样可以确保服务的完整性和稳定性。

    我们将上述的安装和卸载过程保存为.bat文件,添加到项目过程中,并将其属性设置如上所示

    这样在编译程序时,.bat文件将和服务的.exe程序一起处于同一目录下,如此在部署时,可以直接点击安装或者卸载批处理来完成相应的操作

  • 相关阅读:
    SublimeText3下的Python开发环境配置
    从Evernote迁移到Wiz
    读书笔记---《即学即用财务常识120例》
    MC700 安装双系统
    Python3.5 + django1.8.5 安装”import pymysql pymysql.install_as_MySQLdb()”的解决方法
    7z压缩文件时排除指定的文件
    安装.NET Framework后程序无法启动的错误处理
    重拾Blog
    X240s安装Win7 以及如何启用ExpressCache
    新玩具---Amazon Kindle PaperWhite 2
  • 原文地址:https://www.cnblogs.com/wpfworld/p/3411378.html
Copyright © 2020-2023  润新知