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();
_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程序一起处于同一目录下,如此在部署时,可以直接点击安装或者卸载批处理来完成相应的操作
InChatter系统之服务端的Windows服务寄宿方式(三)的更多相关文章
- CentOS7下rsync服务端与Windows下cwRsync客户端实现数据同步配置方法
最近需求想定期备份服务器d盘的数据到Linux服务器上面,做个笔记顺便写下遇到的问题 以前整过一个win下的cwrsync(客户端)+rsync(服务端:存储)的bat脚本 和整过一个Linux下的r ...
- 玩转Windows服务系列——给Windows服务添加COM接口
当我们运行一个Windows服务的时候,一般情况下,我们会选择以非窗口或者非控制台的方式运行,这样,它就只是一个后台程序,没有界面供我们进行交互. 那么当我们想与Windows服务进行实时交互的时候, ...
- 玩转Windows服务系列——创建Windows服务
创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Windows服务项目. 生成的解决方案包含两个项目:Servi ...
- XFire构建服务端Service的两种方式(转)
XFire构建服务端service的两种方式,一是用xfire构建,二是和spring集成构建. 一,xifre构建,确保把xfire的jar包导入到工程中或classpath. 1,service的 ...
- XFire构建服务端Service的两种方式
1.原声构建: 2.集成spring构建 http://blog.csdn.net/carefree31441/article/details/4000436XFire构建服务端Service的两种方 ...
- 玩转Windows服务系列——创建Windows服务
原文:玩转Windows服务系列——创建Windows服务 创建Windows服务的项目 新建项目->C++语言->ATL->ATL项目->服务(EXE) 这样就创建了一个Wi ...
- 服务端增加WCF服务全局异常处理机制
服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. ...
- 浏览器在一次 HTTP 请求中,需要传输一个 4097 字节的文本数据给服务端,可以采用那些方式?
浏览器在一次 HTTP 请求中,需要传输一个 4097 字节的文本数据给服务端,可以采用那些方式? 存入 IndexdDB 写入 COOKIE 放在 URL 参数 写入 Session 使用 POST ...
- 使用rsync在linux(服务端)与windows(客户端)之间同步
说明: 1.RsyncServer服务端 系统:CentOS 6.8 IP地址:192.168.247.141 2.Rsync客户端 系统:Windows10 实现目的: Rsync客户端同步服务端/ ...
随机推荐
- Arch Linux 下Android 源代码的下载以及编译
之前把公司的开发环境由Ubuntu Kylin 换成了Arch Linux.而Arch 下由于种种问题公司的代码一直编只是去.搞定了之后也一直忘了写下来,希望能给相同在Arch 下做Android 开 ...
- HDU 5274 Dylans loves tree 树链剖分+线段树
Dylans loves tree Problem Description Dylans is given a tree with N nodes. All nodes have a value A[ ...
- HelloH5+搭建
一.所用工具 代理服务器:squid 编辑工具:HBuilder 调试工具:weinre 参考工具:Hello MUI HelloH5 二.涉及项目 ***-pifa-------------- ...
- ATan2与ATan的区别
相比较ATan,ATan2究竟有什么不同?本篇介绍一下ATan2的用法及使用条件. 对于tan(θ) = y / x: θ = ATan(y / x)求出的θ取值范围是[-PI/2, PI/2]. θ ...
- Linux设备驱动--块设备(四)之“自造请求”
前面, 我们已经讨论了内核所作的在队列中优化请求顺序的工作; 这个工作包括排列请求和, 或许, 甚至延迟队列来允许一个预期的请求到达. 这些技术在处理一个真正的旋转的磁盘驱动器时有助于系统的性能. 但 ...
- 贪吃蛇 javaScript 谷歌浏览器浏览
1.代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- [Usaco2015 OPEN] Palindromic Paths
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4098 [算法] 显然 , 回文路径中第i个字母的位置(x , y)必然满足 : x ...
- Java使用动态代理实现AOP
参考资料: http://www.importnew.com/15420.htmlhttp://www.cnblogs.com/techyc/p/3455950.html Spring是借助了动态代理 ...
- asp.net mvc4 controller
controller返回几种返回结果
- HDU1180:诡异的楼梯
传送门 题意 迷宫搜索 分析 这题写起来挺简单的,锻炼搜索基本功,一开始用记忆化搜索TLE了,改用访问标记,0ms过了,用优先队列保证终点最快达到,我会在代码中提供一些强力数据 trick 1.遇到梯 ...