Topshelf+Quartz.net+Dapper+Npoi(一)


  背景 


   前段時間公司有個需求(每天給業務導出一批數據,以excel的形式通過郵件發送給他)。A說:直接寫個服務,判斷等於某個時間點,執行一下sql語句,生成excel,寫個EmaiHelper發送給他不就得了,這有什么麻煩的?B說:我了個親娘來,還寫服務呢?你還需要搞個timer去判斷時間點?多費勁啊,直接寫個控制台程序,添加個任務計划,不就搞定了嗎?我只想說:你們都是大神,每次都不加點新的東西,還寫什么代碼,多么沒勁啊,前兩天看到了topshelf+quartz.net這個東東,可以做個練習了。。。。

    目的 


   使用topshelf+quartz.net以windows服務形式來導出excel數據

    dapper只是懶得進行數據庫相關操作,這個orm可以幫我省下不少工作

    npoi當然是生成excel的了,一直在用npoi跟excel打交道(不管獲取excel數據,還是生成excel文件)

      ioc我使用的是autofact

   介紹 


       好了,接下來大體說一下。

   topshelf官方網站:http://topshelf-project.com/     

   github地址:https://github.com/Topshelf/Topshelf/ 

   topshelf文檔:http://docs.topshelf-project.com/en/latest/configuration/quickstart.html

   topshelf是創建windows服務的一種方式,相比原生實現ServiceBase、Install.Installer更為簡單方便, 我們只需要幾行代碼即可實現windows服務的開發。topshelf本身支持windows及linux下mono上部署安裝,同樣也是開源的。

   topshelf相對原生來說,調試起來比較方便,可以在開發時以控制台的形式直接f5調試,發布時用命令以服務的形式部署。還一個比較有用的特性是支持多實例的部署,這樣可以在一台機器上部署多個相對的服務。類似的工具有instsrv和srvany。

  topshelf有兩種使用方式,下面代碼來自官方文檔推薦用法

 1 public class TownCrier
 2 {
 3     readonly Timer _timer;
 4     public TownCrier()
 5     {
 6         _timer = new Timer(1000) {AutoReset = true};
 7         _timer.Elapsed += (sender, eventArgs) => Console.WriteLine("It is {0} and all is well", DateTime.Now);
 8     }
 9     public void Start() { _timer.Start(); }
10     public void Stop() { _timer.Stop(); }
11 }
12 
13 public class Program
14 {
15     public static void Main()
16     {
17         HostFactory.Run(x =>                                 //1
18         {
19             x.Service<TownCrier>(s =>                        //2
20             {
21                s.ConstructUsing(name=> new TownCrier());     //3
22                s.WhenStarted(tc => tc.Start());              //4
23                s.WhenStopped(tc => tc.Stop());               //5
24             });
25             x.RunAsLocalSystem();                            //6
26 
27             x.SetDescription("Sample Topshelf Host");        //7
28             x.SetDisplayName("Stuff");                       //8
29             x.SetServiceName("Stuff");                       //9
30         });                                                  //10
31     }
32 }
View Code

    效果如下圖:

沒錯,一個簡單的topshelf程序就是這么簡單,接下來,只需要簡單配置一下,即可以當服務來使用了。安裝很方便:

安裝:TopshelfDemo.exe install
啟動:TopshelfDemo.exe start
卸載:TopshelfDemo.exe uninstall

安裝成功后,接下來,我們就可以看到服務里多了一個服務:

說完topshelf,接下來說說quartz.net

 

  

 

 

 

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM