Windows服务
起因:前一段时间,业务需要,需要把某些功能封装起来做成服务,起先说的是服务基于WEB,于是先用WEB服务,做到后面,测试时候发现WEB服务功能太弱,无法满足复杂的分析需求,分析主要是GIS分析。一个稍微复杂的分析在前台后台传递数据耗时吓人。最后转战用WINDOWS服务,于是花了一段时间移植代码功能,期间碰到了一些问题。
定义:Windows服务指的是操作系统启动时候可以自动打开的应用程序,这个服务可以在没有用户登录系统的情况下运行,也就是跟用户已经脱离了关系。其实Windows服务跟其他正常的应用程序区别不大,只不过服务是在后台运行,一直运行,不用认为去控制,它就一直在哪里。这就好比把一个正常的windows应用程序一直运行着一样,这就是服务。。
关于服务运行的平台:Windows服务的运行需要NT核心,因此不能运行早95,98,ME上面,其他以后的版本都可以。
一:新建服务。文件->新建->项目->选择windows服务输入名称->ok
完成后,打开代码:
public partialclass Service1 : ServiceBase
{
publicService1()
{InitializeComponent();}
protected override void OnStart(string[] args){ }
protected override void OnStop() {}
}
类继承于ServiceBase 。ServiceBase是所有服务的基类,所有服务都必须实现它。
默认的重写了OnStart, OnStop方法。用来在服务启动和服务关闭时候做一些操作。
除此还可以重写其他的方法,OnContinue。OnPause。OnShutdown等等。
这样一个基本的服务就建立完成了。具体服务的功能自己添加。
二:关于服务的调试
Windows服务调试让人菊花一紧,琢磨了许久才整明白怎么调试,这个方法用着最舒服了。
首先在:
protected override void OnStart(string[] args)
{
Thread.Sleep(15000);
}
里面加一句代码,让主线程沉睡15秒,好让我们有足够的时候做玩需要做的动作,以进入调试状态。
重新生成些工程。可能有人会直接运行服务,结果往往看到一个弹出框,提示啥的就完了。服务的调试需要先安装服务。安装?不要听到这个就吓到了,简单服务的安装很简单:
需要写一点脚本:在工程声称目录BIN下面新建一个文本文件:打开输入
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exeGISServices.exe
Pause
GISServices是我的服务的名称,自己改成的。Pause 为服务安装后的操作,这快不做啥操作,暂停了。可以不写。写完后保存,将后缀名改为.bat。可执行文件。双击运行,
现在服务已经安装好了,打开服务管理器在里面找么会发现我们安装的服务。
双击打开服务,点启动,这个时候注意了,能不能计入调试状态就看这里了,点了启动后马上在工程里面打开调试->附加到进程

找到与服务名字对应的进程,附加进去。如果找不到记得把显示所有用户进程和显示所有会话的进程勾着。
然后就静静等待吧:
一会就会进入到断点。

然后就可以开始调试了。至此一个服务创建和调试就完成了。主要是调试麻烦的很。当对服务的功能坐了修改后,无伦什么修改,都需要对服务进行卸载重新安装。卸载一样也是一个可执行文件.BAT
C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe/u GISServices.exe
pause
里面脚本稍有不同。
双击运行 :

最后卸载完成。
·一个服务创建很简单,调试是非常麻烦的,所以建议在做服务的时候先在普通程序里面实现服务的基本功能,最后再将功能移植到服务里面,这样可以减少很多工作量和很多不必要的麻烦。
三:与服务通信
由于服务是单独独立运行在后台的,你可能会很纳闷那怎么跟服务进行交互呢。在大多数情况下,逗是通过TCPCLIENT借助HTTP协议来进行通信。
有关TCPCLIENT这块网上很多,由于我很少涉及通信功能的开发,对这个不是很了解,只知道怎么用。就不在此累赘,