zoukankan      html  css  js  c++  java
  • web服务的写法以及出现的问题

    1、首选我们需要打开VS2008,然后点击文件--》新建--》项目,选择Visual C#--》windows--》windows服务。如下图所示:

    2、然后修改Service1.cs类。

    我们需要重写OnStart和OnStop方法。代码如下所示:

    1. using System;  
    2. using System.Collections.Generic;  
    3. using System.ComponentModel;  
    4. using System.Data;  
    5. using System.Diagnostics;  
    6. using System.ServiceProcess;  
    7. using System.IO;  
    8. using System.Text;  
    9. using System.Timers;  
    10. using System.Threading;  
    11.   
    12. //=================================================================================   
    13. //   
    14. //        Copyright (C) 2011, 飞龙在天      
    15. //        All rights reserved   
    16. //   
    17. //        FileName: Class1   
    18. //        Created by draonpeng2008 at 11-08-02 10:40:57    
    19. //        Email: liufeilong1983@163.com   
    20. //        http://blog.csdn.net/dragonpeng2008   
    21. //   
    22. //==================================================================================   
    23.   
    24. namespace WindowsServiceTest  
    25. {  
    26.     public partial class Service1 : ServiceBase  
    27.     {  
    28.         public Service1()  
    29.         {  
    30.             InitializeComponent();  
    31.         }  
    32.   
    33.         protected override void OnStart(string[] args)  
    34.         {  
    35.             EventLog.WriteEntry("我的服务启动--飞龙在天");//在系统事件查看器里的应用程序事件里来源的描述      
    36.             writestr("服务启动");//自定义文本日志      
    37.             System.Timers.Timer t = new System.Timers.Timer();//定时器   
    38.             t.Interval = 1000;//设置定时器时间间隔为1000毫秒   
    39.             t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrv);//到达时间的时候执行事件(每隔一秒)       
    40.             t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);       
    41.             t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;       
    42.         }  
    43.   
    44.         protected override void OnStop()  
    45.         {  
    46.             writestr("服务停止");  
    47.             EventLog.WriteEntry("我的服务停止");   
    48.         }  
    49.   
    50.         /// <summary>      
    51.         /// 定时执行程序代码      
    52.         /// </summary>      
    53.         /// <param name="source"></param>      
    54.         /// <param name="e"></param>      
    55.         public void ChkSrv(object source, System.Timers.ElapsedEventArgs e)  
    56.         {  
    57.             int intSecond = e.SignalTime.Second;  
    58.             try  
    59.             {  
    60.                 //这里执行你的东西   
    61.                 writestr("服务运行中:"+intSecond);  
    62.                 Thread.Sleep(10000);  
    63.             }  
    64.             catch (Exception err)  
    65.             {  
    66.                 writestr(err.Message);  
    67.             }  
    68.         }  
    69.           
    70.   
    71.         /// <summary>   
    72.         /// 将信息输出到文本文件   
    73.         /// </summary>   
    74.         /// <param name="readme"></param>   
    75.         public void writestr(string readme)  
    76.         {  
    77.             StreamWriter dout = new StreamWriter(@"D:\" + "WindowsServiceTestLog.txt", true);  
    78.             dout.Write("\r\n事件:" + readme + "\r\n操作时间:" + System.DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));  
    79.             dout.Close();  
    80.         }     
    81.   
    82.   
    83.     }  
    84. }  
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.ServiceProcess;
    using System.IO;
    using System.Text;
    using System.Timers;
    using System.Threading;
    
    //=================================================================================
    //
    //        Copyright (C) 2011, 飞龙在天   
    //        All rights reserved
    //
    //        FileName: Class1
    //        Created by draonpeng2008 at 11-08-02 10:40:57 
    //        Email: liufeilong1983@163.com
    //        http://blog.csdn.net/dragonpeng2008
    //
    //==================================================================================
    
    namespace WindowsServiceTest
    {
        public partial class Service1 : ServiceBase
        {
            public Service1()
            {
                InitializeComponent();
            }
    
            protected override void OnStart(string[] args)
            {
                EventLog.WriteEntry("我的服务启动--飞龙在天");//在系统事件查看器里的应用程序事件里来源的描述   
                writestr("服务启动");//自定义文本日志   
                System.Timers.Timer t = new System.Timers.Timer();//定时器
                t.Interval = 1000;//设置定时器时间间隔为1000毫秒
                t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrv);//到达时间的时候执行事件(每隔一秒)    
                t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);    
                t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;    
            }
    
            protected override void OnStop()
            {
                writestr("服务停止");
                EventLog.WriteEntry("我的服务停止"); 
            }
    
            /// <summary>   
            /// 定时执行程序代码   
            /// </summary>   
            /// <param name="source"></param>   
            /// <param name="e"></param>   
            public void ChkSrv(object source, System.Timers.ElapsedEventArgs e)
            {
                int intSecond = e.SignalTime.Second;
                try
                {
                    //这里执行你的东西
                    writestr("服务运行中:"+intSecond);
                    Thread.Sleep(10000);
                }
                catch (Exception err)
                {
                    writestr(err.Message);
                }
            }
            
    
            /// <summary>
            /// 将信息输出到文本文件
            /// </summary>
            /// <param name="readme"></param>
            public void writestr(string readme)
            {
                StreamWriter dout = new StreamWriter(@"D:\" + "WindowsServiceTestLog.txt", true);
                dout.Write("\r\n事件:" + readme + "\r\n操作时间:" + System.DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"));
                dout.Close();
            }   
    
    
        }
    }
    

    3、在Service1.cs的设计视图上右键“添加安装程序”。系统会自动生成“ProjectInstaller.cs”文件,在该文件的设计视图界面会有两个控件,一个是serviceProcessInstaller1,一个是serviceInstaller1。

    如下图:

    4、在ProjectInstaller.cs设计界面中,我们设置serviceProcessInstaller1和serviceInstaller1的属性。

    serviceInstaller1属性中设置:

        Description(系统服务的描述)

        DisplayName (系统服务中显示的名称)

        ServiceName(系统事件查看器里的应用程序事件中来源名称)

        StartType(启动服务的方式,分为手动、自动和禁用)

    serviceProcessInstaller1属性设置:

        Account 下拉设置成 LocalSystem

    5、注意:我们无法在VS2008中调试该工程,会弹出错误信息,如下图:

    6、我们需要用InstallUtil.exe进行服务的安装,该文件可以在

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\

    文件夹下找到。

    7、我们将InstallUtil.exe复制到源程序的Debug文件夹下,然后我们以管理员身份运行VS2008命令提示。


    注意:这里必须以管理员的身份运行,否则在安装服务时会出现以下错误:

    在“安装”阶段发生异常。

    System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可访问的日志: Security。

    8、然后我们执行CMD命令,定位到源程序的Debug文件夹下,因为我的Debug文件夹在E盘,所以使用的dos命令如下:

     

    1. E:  
    2. cd E:\Projects\WindowsServiceTest\WindowsServiceTest\bin\Debug  
    3. InstallUtil WindowsServiceTest.exe  
              E:
              cd E:\Projects\WindowsServiceTest\WindowsServiceTest\bin\Debug
              InstallUtil WindowsServiceTest.exe

    执行结果如下图所示:


    9、然后我们在控制面板--》管理工具--》服务中会看到多了一个MyService的服务。我们可以看到服务名称为:ServiceTest,服务描述为:我的测试服务。


    10、我们启动服务,然后打开D盘根目录,会看到多了一个名为:WindowsServiceTestLog.txt的文本文件。

    打开该文本文件,会看到我们新建的服务每秒往该文本文件中写入了一行文本。


    11、最后我们就可以卸载该服务了,我们在命令行中输入:

     

    1. InstallUtil -u WindowsServiceTest.exe  
    InstallUtil -u WindowsServiceTest.exe

    可以看到执行结果如下:


    我们再到服务中查看,就会发现“MyService”已经被卸载掉了。

    源码下载:

    http://download.csdn.net/source/3488125

     

  • 相关阅读:
    string.Format组合跳转路径
    jquery 设置asp:dropdownlist 选中项
    asp:UpdatePanel中js失效问题已解决
    repeater 一个td多个div显示图片
    aps.net js获取服务器控件
    nfs—文件转换器
    Linux之文件权限
    关于Linux与Windows的在服务器的一些区别
    关于Linux目录结构的理解
    新的旅程
  • 原文地址:https://www.cnblogs.com/Blogzhangli1989/p/3030815.html
Copyright © 2011-2022 走看看