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.NET\Framework\v4.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.NET\Framework\v4.0.30319
set PATH=%PATH%;%DOTNETFX2%
echo 卸载服务...
echo ---------------------------------------------------
InstallUtil /u InChatter.Service.WSHost.exe
echo ---------------------------------------------------
pause

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

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

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

posted @ 2013-11-06 21:55  Skysper  阅读(702)  评论(1编辑  收藏  举报