亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Asp.NET 在Web頁面中管理服務

系統 2233 0

公司項目有一個需求,就是需要定時的給一些用戶發送郵件。本來想想蠻簡單的,只需要在Global.ascx中啟動一個定時器,然后定時執行這項任務就好了??墒沁\行的結果卻不是我想想中的那樣。我寫的代碼是這樣的:

      
        private
      
      
         System.Timers.Timer m_timer;
    
      
      
        void
      
       Application_Start(
      
        object
      
      
         sender, EventArgs e)
    {
        m_timer 
      
      = 
      
        new
      
       System.Timers.Timer(
      
        60000
      
      );
      
        //
      
      
        設置間隔時間
      
      
        m_timer.Enabled = 
      
        true
      
      
        ;
        m_timer.Elapsed 
      
      += 
      
        new
      
      
         System.Timers.ElapsedEventHandler(run);
        
      
      
        //
      
      
        開啟時鐘。
      
      
                m_timer.Start();
    }
      
    

原來這個定時器只有在網頁第一次被訪問的時候才能啟動,就是說網站在被重啟的時候還需要手動的訪問我的任意一個頁面來激活這個Timer,這就罷了吧,反正去重啟的人也是我,自己注意點也就是了??墒墙涍^幾天的測試,發現這個定時器并沒有一直執行,到一定的時間,這個定時器就停止工作了。后來百度了一下,發現一種說法,就是當應用程序池被回收后,我們還需要再次激活這個Timer,而IIS默認的回收時間是29小時。算了,我也忍了,畢竟這個站是一直會被訪問的。重復激活就重復激活吧,只要程序能用,咱就將就一下咯。

又經過幾天的測試,還是發現Timer有事會停止工作,百度了一下,有人說是這樣的一個Timer對象,在對象池里面是沒有引用的。當垃圾回收機制啟動的時候,這個Timer也會被回收掉,不管你有沒有在RUN。看到這里我崩潰了,一個簡單的定時器遇到了這么多的問題,算了我們還是不用定時器,改用服務吧,這總該可以了吧,百度了一下,發現了一個管理服務的類,寫了一個測試頁面測試了一下,效果還不錯

測試頁面代碼:

      
        protected
      
      
        void
      
       Page_Load(
      
        object
      
      
         sender, EventArgs e)
    {
        
      
      
        string
      
       serverName = 
      
        "
      
      
        Monitoring
      
      
        "
      
      
        ;
        
      
      
        string
      
       filePath = 
      
        "
      
      
        C:\\Documents and Settings\\Administrator\\My Documents\\Visual Studio 2010\\Projects\\ServiceHelloWorld\\ServiceHelloWorld\\bin\\Debug\\ServiceHelloWorld.exe
      
      
        "
      
      
        ;
        
      
      
        bool
      
       serviceIsExist =
      
         ServerHelper.DAL.ServiceHelper.ServiceExist(serverName);
        
      
      
        if
      
      
         (serviceIsExist)
        {
            Common.Common.LogManager.GetInstance().Debug(
      
      
        "
      
      
        卸載
      
      
        "
      
      
        );
            ServerHelper.DAL.ServiceHelper.UnInstallService(filePath, serverName);
            Response.Write(
      
      
        "
      
      
        卸載
      
      
        "
      
      
        );
        }
        
      
      
        else
      
      
        
        {
            
      
      
        //
      
      
          string serviceName = "";
      
      
            Common.Common.LogManager.GetInstance().Debug(
      
        "
      
      
        安裝
      
      
        "
      
      
        );
            ServerHelper.DAL.ServiceHelper.InstallService(filePath,serverName);
            Response.Write(serverName);
            Response.Write(
      
      
        "
      
      
        安裝
      
      
        "
      
      
        );
        }
      
    

安裝服務的代碼:

      
                ///
      
      
        <summary>
      
      
        ///
      
      
         安裝服務
        
      
      
        ///
      
      
        </summary>
      
      
        ///
      
      
        <param name="stateSaver"></param>
      
      
        ///
      
      
        <param name="filepath"></param>
      
      
        ///
      
      
        <param name="serviceName"></param>
      
      
        public
      
      
        static
      
      
        void
      
       InstallService(
      
        string
      
       filepath, 
      
        string
      
      
         serviceName)
        {
            System.ServiceProcess.ServiceController service 
      
      = 
      
        new
      
      
         System.ServiceProcess.ServiceController(serviceName);
            
      
      
        if
      
       (!
      
        ServiceExist(serviceName))
            {
                AssemblyInstaller myAssemblyInstaller 
      
      = 
      
        new
      
      
         AssemblyInstaller();
                myAssemblyInstaller.UseNewContext 
      
      = 
      
        true
      
      
        ;
                myAssemblyInstaller.Path 
      
      =
      
         filepath;
                IDictionary stateSaver 
      
      = 
      
        new
      
      
         Hashtable();
                stateSaver.Clear();
                myAssemblyInstaller.Install(stateSaver);
                myAssemblyInstaller.Commit(stateSaver);
                myAssemblyInstaller.Dispose();
                service.Start();
            }
            
      
      
        else
      
      
        
            {
                
      
      
        if
      
       (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status !=
      
         System.ServiceProcess.ServiceControllerStatus.StartPending)
                {
                    service.Start();
                }
            }
        }
      
    

Asp.NET 在Web頁面中管理服務

卸載服務的代碼:

      
                ///
      
      
        <summary>
      
      
        ///
      
      
         卸載服務
        
      
      
        ///
      
      
        </summary>
      
      
        ///
      
      
        <param name="filepath"></param>
      
      
        ///
      
      
        <param name="serviceName"></param>
      
      
        public
      
      
        static
      
      
        void
      
       UnInstallService(
      
        string
      
       filepath, 
      
        string
      
      
         serviceName)
        {
            
      
      
        try
      
      
        
            {
                
      
      
        if
      
      
         (ServiceExist(serviceName))
                {
                    AssemblyInstaller myAssemblyInstaller 
      
      = 
      
        new
      
      
         AssemblyInstaller();
                    myAssemblyInstaller.UseNewContext 
      
      = 
      
        true
      
      
        ;
                    myAssemblyInstaller.Path 
      
      =
      
         filepath;
                    myAssemblyInstaller.Uninstall(
      
      
        null
      
      
        );
                    myAssemblyInstaller.Dispose();
                }
            }
            
      
      
        catch
      
      
         (Exception ex)
            {
                
      
      
        throw
      
      
        new
      
       Exception(
      
        "
      
      
        unInstallServiceError/n
      
      
        "
      
       +
      
         ex.Message);
            }
        }
      
    

Asp.NET 在Web頁面中管理服務

有了這樣的一個方法,我就再也不會用Timer的方式來處理定時的事務了,而且據說大牛們都不用Timer來做事務,都用服務。

Asp.NET 在Web頁面中管理服務


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久99精品这里精品动漫6 | 正在播放一区 | 91精品全国免费观看老司机 | 九九99九九精彩 | 国产一区二区三区四区在线 | 久久亚洲国产精品 | 日本一级黄色毛片 | 亚洲区一二三四区2021 | 色婷婷天天综合在线 | 中文字幕在线观看国产 | 奇米影视第四色888 奇米影视第四色首页 | 激情婷婷网 | 免费一看一级毛片人 | 日韩日b视频 | 337p亚洲精品色噜噜狠狠 | 亚洲综合色婷婷在线观看 | 97中文字幕在线观看 | 欧美一线视频 | 99爱视频在线观看 | 欧美性xxxxbbbb| 亚洲视频综合 | 国产一区二区三区成人久久片 | 久久久99精品免费观看 | 国产欧美精品一区二区三区-老狼 | 精品国产一区二区在线观看 | 国产成人乱码一区二区三区在线 | 青草福利视频 | 日韩免费看| 综合伊人| 激情五月婷婷综合网 | 91精品国产亚一区二区三区 | 亚洲视频毛片 | 中文字幕一区久久久久 | 久久精品这里热有精品2015 | 免费网站成人亚洲 | 国产在线五月综合婷婷 | 亚洲精品在线网 | 亚洲精品一区二区三区五区 | 欧美午夜视频 | 福利小视频在线 | 国产亚洲第一伦理第一区 |