Windows服务实现不同平台数据库表的迁移

引言 

       在项目中要做这么一个功能,将两个平台的两张数据库表汇总到一张表中,而且数据是实时进行更新的,这就需要用到windows服务。

windows服务定义

          何谓window服务呢,来听听百度怎么说?

          Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。这种服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。

                                                                                                                                                                                                                                                                                                    ------摘自百度百科《Windows服务》

         

实现

       切入正题,大家看我是怎么来实现的。

开发环境

       所用开发工具:VS2012

       所用开发语言:C#

具体步骤

新建

       首先新建一个解决方案,然后添加一个工程Windwos 服务。

编写service1代码

       在Service1中编写代码如下:

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading;

namespace ITSM
{
    public partial class ITSM : ServiceBase
    {
        ITSMHelper itsm = new ITSMHelper();
        public ITSM()
        {
            InitializeComponent();
        }
        private Thread ThreadHello;
        protected override void OnStart(string[] args)
        {

            //EventLog.WriteEntry("我的服务启动");//在系统事件查看器里的应用程序事件里来源的描述  
            //writestr("服务启动");//自定义文本日志  
            //System.Timers.Timer t = new System.Timers.Timer();
            //t.Interval = 1000;
            //t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrv);//到达时间的时候执行事件;   
            //t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);   
            //t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;  
            
            ThreadHello = new Thread(new ThreadStart(ITSM_DATE_BIND));
            ThreadHello.Start();//开始线程
            itsm.writestr("开始任务:ITSM检索数据开始Start\r\n");
 
        }
        private void ITSM_DATE_BIND()
        {
            while (true)
            {
                itsm.ITSM_INSERT_UPDATE();
                //Thread.Sleep(5*60*1000);//每5分钟执行一次
                Thread.Sleep(10*60*1000);
                itsm.writestr("开始任务:线程/n/r");
            }
        }

        protected override void OnStop()
        {
            itsm.writestr("服务停止");
            EventLog.WriteEntry("我的服务停止");
        }
    }
}
</span>

实现内容和调试

       其中方法ITSM_DATE_BIND()是具体实现的内容,由于公司保密性,暂不透漏。大家只是知道怎么用windows服务来实现你的内容就可以了。      

       如果在实现的过程中你想要调试,你可以再建一个Windows窗体应用程序。在其中设置一个button事件来执行windows服务实现的内容。这样能保证出错率大大减低。

布服务

      之后就是发布服务了。

添加和设置

      在Service界面右击选择添加安装程序,然后出现ProjectInstaller.cs文件。界面上出现serviceProcessInstaller1和serviceInstaller1。分别对其属性进行设置。

Windows服务实现不同平台数据库表的迁移_第1张图片


重新生成

       将你的工程重新生成为Windows应用程序。

三个必要文件

       然后在其中加入三个文件。下载地址:http://download.csdn.net/detail/u013037201/9559857


编写文件

       编写CreateService.bat内容为:InstallUtil.exe ITSM.exe

       编写DeleteService.bat内容为:InstallUtil.exe -u ITSM.exe

生成服务    

      双击CreateService.bat进行服务发布。

     然后打开你的管理工具中的服务。其中多了一个服务。

启动服务

      右击启动便可。你的windows服务可以正常为你实现你要的内容了。

小结

      windows服务是自动处理后台数据的一个有利神器,可以处理几万以上的大数据。


备注:以上内容根据你自己的情况而定。比如你可以开多个线程,实现内容是你自己的,服务名取你想用的等等……实现时参考博文:http://www.csharpwin.com/csharpspace/5575r154.shtml



      


你可能感兴趣的:(Windows服务)