<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用Topshelf創建Windows 服務

      Winndows Service 是一種可隨 Windows 操作系統啟動而啟動的,在后臺運行的,通常不和用戶產生交互的程序。它無法通過雙擊來運行,類似于 Unix 守護進程(daemon processes),當用戶注銷時它也不會停止。

      Windows 服務由三部分組成:

      • 一個服務可執行文件;
      • 一個服務控制程序(SCP);
      • 服務控制管理器(SCM),負責在 HKLM"SYSTEM"CurrentControlSet"Services 下創建服務鍵值。用戶可通過 SCP 控制服務的啟動、停止、暫停等,SCP 會通過 SCM 調用服務程序

      開發一個Windows服務通常也比較簡單,在開發的時候我們期望以命令行方式運行,想對Windows服務有更多的控制,就有一個Windows服務框架TopShelf 可以滿足,使用這個框架要求你使用一個IoC容器,在框架中使用的是common service locator 接口,可以根據你的喜好去選擇你自己中意的IoC容器。

      TopShelf的基本介紹可以參看Dru Sellers 的介紹性文章 TopShelf。下面的代碼就是創建了一個Windows服務:

      using System;
          using System.Collections.Generic;
          using System.IO;
          using System.Timers;
          using log4net.Config;
          using Microsoft.Practices.ServiceLocation;
          using StructureMap;
          using Topshelf;
          using Topshelf.Configuration;

          internal class Program
          {
              static void Main(string[] args)
              {
                  XmlConfigurator.ConfigureAndWatch(new FileInfo(".\\log4net.config"));
                  IRunConfiguration cfg = RunnerConfigurator.New(x =>
                  {
                      x.AfterStoppingTheHost(h => { Console.WriteLine("AfterStop called invoked, services are stopping"); });

                       x.SetDescription("Sample Topshelf Host");
                      x.SetDisplayName("Stuff");
                      x.SetServiceName("stuff");

                      x.ConfigureServiceInIsolation<TownCrier>("tc", s =>
                      {
                          s.CreateServiceLocator(()=>
                          {
                              ObjectFactory.Initialize(i =>
                              {
                                  i.ForConcreteType<TownCrier>().Configure.WithName("tc");
                              });

                              return new StructureMapServiceLocator();
                          });
                          s.WhenStarted(tc => tc.Start());
                          s.WhenStopped(tc => tc.Stop());
                      });

                      x.RunAsLocalSystem();

                     });

                  Runner.Host(cfg, args);
              }
          }

      這里我們使用了StructureMap 作為IoC容器,創建了一個StructureMapServiceLocator來掩藏StructureMap,創建的Windows服務的名稱是stuff,可以吊相應的方法啟動,停止服務。通過直接運行.exe文件在控制臺中運行或者調試服務了。

      通過命令運行,安裝卸載Windows服務

      Stuff.exe                #控制臺方式運行

      Stuff.exe /install     #安裝Windows服務

      Stuff.exe /uninstall  #卸載Windows服務

      默認情況下,Windows服務只能運行一個實例,如果我們想運行多個實例怎么辦,可以在Topshelf的命令行參數中增加–instance <instance name>來指定實例的名稱,也可以通過運行時讀取配置文件來達到目的,我更喜歡使用后一種方式設置,在應用程序的配置文件上增加個配置WindowsServiceInstanceName:

      <?xml version="1.0" encoding="utf-8" ?>

      <configuration>

         <appSettings file="applicationSettings.config">

          <add key="WindowsServiceInstanceName" value="Stuff"/>

         </appSettings>

      </configuration>

      然后改造一下上述代碼

             static void Main(string[] args)
              {

                  var instanceName = ConfigurationManager.AppSettings["WindowsServiceInstanceName"];

                  XmlConfigurator.ConfigureAndWatch(new FileInfo(".\\log4net.config"));
                  IRunConfiguration cfg = RunnerConfigurator.New(x =>
                  {
                      x.AfterStoppingTheHost(h => { Console.WriteLine("AfterStop called invoked, services are stopping"); });

                      x.SetDescription("Sample Topshelf Host");
                      x.SetDisplayName(instanceName );
                      x.SetServiceName(instanceName );
      ……

      這樣我們就可以達到在同臺機器上安裝多個Windows 服務實例,推薦大家使用這個Windows服務框架TopShelf ,可以簡化很多工作和增加靈活性

      posted @ 2009-11-24 22:09  張善友  閱讀(8198)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 亚洲人成绝网站色www| 天天躁夜夜躁天干天干2020| 粗了大了 整进去好爽视频| 少妇高潮激情一区二区三| 99久久久国产精品免费无卡顿| 91精品国产自产91精品| 色欲国产精品一区成人精品| 男女激情一区二区三区| 美女又黄又免费的视频| 久久精品国产亚洲精品| 午夜爽爽爽男女污污污网站| 欧美老熟妇乱子伦牲交视频| 最新中文字幕av无码专区不| 博罗县| a在线观看视频在线播放| 色狠狠色噜噜AV一区| 国产L精品国产亚洲区在线观看| 亚洲无av中文字幕在线| 国产成人高清精品免费软件| 国产一区精品综亚洲av| 熟妇人妻av无码一区二区三区| 自拍视频一区二区三区四区 | 免费看黄色亚洲一区久久| 激情内射亚州一区二区三区爱妻 | 国产亚洲精品成人aa片新蒲金| 色综合天天综合天天综| 久久精品国产一区二区三区不卡| 国产最新精品系列第三页| 无码人妻精品一区二区在线视频| 国产蜜臀av在线一区在线| 无码日韩精品一区二区三区免费 | 日本国产精品第一页久久| 亚洲免费人成在线视频观看| 国产成人高清亚洲综合| 国产无套白浆一区二区| 亚洲男人综合久久综合天堂| 国产精品国三级国产av| 日本一高清二区视频久二区| 亚洲夂夂婷婷色拍ww47| 免费无遮挡毛片中文字幕| 坐盗市亚洲综合一二三区|