静思
思考中

导航

 

1.新建一个Windows应用程序winserver,删除里面的form窗体;

2.在winserver应用程序中添加Windows服务MyServer.cs;

3.在MyServer设计模式中添加控件Eventlog,在类cs中完成如下代码:

        private static Timer timer = new Timer();
        private DateTime settingTime;

 

        public MyServer()
        {
            InitializeComponent();

            if (!System.Diagnostics.EventLog.SourceExists("MySource"))
            {
                System.Diagnostics.EventLog.CreateEventSource(
                    "MySource", "MyNewLog");
            }
            eventLog1.Source = "MySource";
            eventLog1.Log = "MyNewLog";
            eventLog1.WriteEntry("服务开始。");
        }

 

        protected override void OnStart(string[] args)
        {
            // TODO: 在此处添加代码以启动服务。

            InitializeTimer();
        }

 

        protected override void OnStop()
        {
            // TODO: 在此处添加代码以执行停止服务所需的关闭操作。

             timer.Stop();
            eventLog1.WriteEntry("服务正常终止。");
        }

 

 

       private void InitializeTimer()
        {

          
            eventLog1.WriteEntry("初始化定时器。。。");

            timer.Interval = 60000 * Convert.ToDouble(ConfigurationSettings.AppSettings["IntervalMinutes"]);
            SetNotifyTime(DateTime.Now);
            timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
            timer.AutoReset = true;
            timer.Enabled = true;
         }


        private void SetNotifyTime(DateTime dt)
        {
            string tag = ConfigurationSettings.AppSettings["StartJobTime"];
            string[] t = tag.Split(':');

            int hour = int.Parse(t[0]);
            int min = int.Parse(t[1]);

            settingTime = new DateTime(dt.Year, dt.Month, dt.Day, hour, min, 0);
            if (settingTime < DateTime.Now)
            {
                settingTime = settingTime.AddDays(1);
                eventLog1.WriteEntry("下一次执行日期:" + settingTime);
            }
        }


        void timer_Elapsed(object sender, ElapsedEventArgs e)
        {

              if (settingTime.ToShortDateString() == DateTime.Now.ToShortDateString()
                && settingTime.Hour == DateTime.Now.Hour
                && settingTime.Minute == DateTime.Now.Minute)
            {
                try
                {


                    RunCommands();

                }
                finally
                {
                    SetNotifyTime(DateTime.Now.AddDays(1));
                    eventLog1.WriteEntry("下一次执行日期:" + settingTime);

                }

            }

 

        }

        private void RunCommands()
        {


            try
            {
                eventLog1.WriteEntry("调用服务。。");
                /*---------------专项层WebService调用开始-------------  */
              
                localhost.WebService objJob = new localhost.WebService();

                objJob.Timeout = 20 * 60000;
                Interface(objJob);
            


                eventLog1.WriteEntry("结束!");
            }
            catch (Exception ex)
            {
                eventLog1.WriteEntry(ex.Message);
            }
        }

 

        void Interface(localhost.WebService objJob)
        {
            try
            {
                objJob.Dtent_to_users();

              
                  eventLog1.WriteEntry("数据进入bxusers相关表成功!");
            }
            catch (Exception ex)
            {
                eventLog1.WriteEntry(ex.Message);
            }
        }

 

4.配置app.config

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="XCWL_WindowsApplication.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
  <appSettings>
    <add key="IntervalMinutes" value="1" />
    <add key="StartJobTime" value="16:28" />
  </appSettings>
    <applicationSettings>
        <MyServer.Properties.Settings>
            <setting name="MyServer_localhost_WebService"
                serializeAs="String">
                <value>http://localhost:8081/WebServer/LocalService.asmx</value>
            </setting>
        </MyServer.Properties.Settings>
    </applicationSettings>
</configuration>

5.  在Program.cs中改写main程序:

      static void Main()
        {
          

            ServiceBase[] Service = new ServiceBase[] { new Service() };
            ServiceBase.Run(Service);
        }

 

 6.在winserver中添加web引用http://localhost:8081/WebServer/LocalService.asmx

 7.点MyServer设计器,右键选择添加-安装程序类,生成ProjectInstaller.cs

 8.在解决方案中,

   a.右键解决方案选择添加- 新建项目- 其它项目类型下(安装和部署)-选择安装项目,命名为setup1;

   b.右键setup1--添加--项目输出-默认主输出-确认;

   c.右键setup1--添加--视图--自定义操作;

   d.在生成的"自定义操作"页面,右键“自定义操作”添加自定义操作--确认-确认;

   e.右键解决方案--属性--配置属性(配置),在右边setup1和winserver选项中选中生成复选框;

    f.生成解决方案,安装程序即生成;

 


 

posted on 2010-12-02 16:45  murry  阅读(2278)  评论(0)    收藏  举报