亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

使用Topshelf組件構建簡單的Windows服務

2024-07-10 13:32:11
字體:
來源:轉載
供稿:網友

 很多時候都在討論是否需要了解一個組件或者一個語言的底層原理這個問題,其實我個人覺得,對于這個問題,每個人都有自己的看法,個人情況不同,選擇的方式也就會不同了。我個人覺得無論學習什么,都應該嘗試著去了解對應的原理和源碼(這里就不要急著吐槽,容我說完)。對底層的了解不是為了讓你寫出類似的東西,讓你寫也不可能寫的出來,重寫一個就需要以此修改整個底層結構,了解底層知識只是為了讓你可以在寫業務代碼時,選擇合適的方式,以此使底層與業務層配合達到效率最佳。任何一種方式有壞有好,需要合適的選擇。

  如果覺得樓主以上的說法不對,或者有些不妥,還望見諒,因為爭論一個觀點沒有意義,認為對的人自己會去理解,認為不對的,可以忽略。沒有這個必要去花費時間和精力取討論這種事情。

  以上是扯淡,下面切入正題。前面介紹了一個組件Hangfire,用于設置定時任務等等操作,在這里介紹另一款組件Topshelf。

一.Topshelf組件概述

   Topshelf是.NET平臺的Windows服務框架。Topshelf可以輕松創建Windows服務,測試服務,調試服務,并最終將其安裝到Windows服務控制管理器(SCM)中。Topshelf通過允許開發人員專注于服務邏輯,而不是與.NET框架中的內置服務支持交互的細節。開發人員不需要了解服務類的復雜細節,通過InstallUtil執行安裝,或者了解如何將調試器附加到服務以進行故障排除問題。

   創建Windows服務與創建控制臺應用程序類似,控制臺應用程序創建后,創建一個具有公共Start和Stop方法的單一服務類。服務操作的方式較多,自動,自動(延遲),手動和禁用啟動選項本地系統,本地服務,網絡服務,用戶名/密碼或安裝期間提示的服務憑證。服務啟動依賴項,包括SQL Server,MSMQ和其他具有不同服務名稱的多實例服務安裝服務恢復選項,包括重新啟動,重新引導或運行程序。Topshelf與Mono合作,可以將服務部署到Linux。服務安裝功能目前僅限Windows。

二.Topshelf用法說明

      介紹完對應的組件背景概述,在這里就要介紹一下如何使用這個組件的使用方法。該組件的使用方法有另個方法,都在HostFactory類中,下面具體的介紹一個使用方式。

1.配置新的服務主機

HostFactory.New(x =>        {          // 可以定義不需要接口依賴性的服務,這只是為了          //在此示例中顯示并未使用。          x.Service<SampleSansInterfaceService>(s =>            {              s.ConstructUsing(() => new SampleSansInterfaceService());              s.WhenStarted(v => v.Start());              s.WhenStopped(v => v.Stop());            });        });

2.配置和運行新的服務主機,處理任何異常并將其寫入日志

HostFactory.Run(x =>        {          x.UseLog4Net("log4net.config");          x.UseAssemblyInfoForServiceInfo();          bool throwOnStart = false;          bool throwOnStop = false;          bool throwUnhandled = false;          x.Service(settings => new SampleService(throwOnStart, throwOnStop, throwUnhandled), s =>          {            s.BeforeStartingService(_ => Console.WriteLine("BeforeStart"));            s.BeforeStoppingService(_ => Console.WriteLine("BeforeStop"));          });          x.SetStartTimeout(TimeSpan.FromSeconds(10));          x.SetStopTimeout(TimeSpan.FromSeconds(10));          x.EnableServiceRecovery(r =>            {              r.RestartService(3);              r.RunProgram(7, "ping google.com");              r.RestartComputer(5, "message");              r.OnCrashOnly();              r.SetResetPeriod(2);            });          x.AddCommandLineSwitch("throwonstart", v => throwOnStart = v);          x.AddCommandLineSwitch("throwonstop", v => throwOnStop = v);          x.AddCommandLineSwitch("throwunhandled", v => throwUnhandled = v);          x.OnException((exception) =>          {            Console.WriteLine("Exception thrown - " + exception.Message);          });        });

3.Topshelf配置操作方法

Topshelf,Windows

三.Topshelf核心對象解析

承接上文,介紹完畢相關背景和常規操作,在這里介紹一個核心對象的一些方法。

1.HostFactory.New():

public static Host New(Action<HostConfigurator> configureCallback)    {      try      {        if (configureCallback == null)          throw new ArgumentNullException("configureCallback");        var configurator = new HostConfiguratorImpl();        Type declaringType = configureCallback.Method.DeclaringType;        if (declaringType != null)        {          string defaultServiceName = declaringType.Namespace;          if (!string.IsNullOrEmpty(defaultServiceName))            configurator.SetServiceName(defaultServiceName);        }        configureCallback(configurator);        configurator.ApplyCommandLine();        ConfigurationResult result = ValidateConfigurationResult.CompileResults(configurator.Validate());        if (result.Message.Length > 0)        {          HostLogger.Get(typeof(HostFactory))               .InfoFormat("Configuration Result:/n{0}", result.Message);        }        return configurator.CreateHost();      }      catch (Exception ex)      {        HostLogger.Get(typeof(HostFactory)).Error("An exception occurred creating the host", ex);        HostLogger.Shutdown();        throw;      }    }

該方法用于配置新的服務主機,方法接受一個參數Action<HostConfigurator>配置方法調用,該方法返回Host對象,表示Topshelf服務主機,準備運行。 configureCallback.Method.DeclaringType;用于獲取聲明該成員的類。declaringType.Namespace;用于獲取獲取 System.Type 的命名空間。ValidateConfigurationResult.CompileResults(configurator.Validate());用于驗證配置結果。

2.HostFactory.Run():

public static TopshelfExitCode Run(Action<HostConfigurator> configureCallback)    {      try      {        return New(configureCallback)          .Run();      }      catch (Exception ex)      {        HostLogger.Get(typeof(HostFactory))             .Error("The service terminated abnormally", ex);        HostLogger.Shutdown();                return TopshelfExitCode.AbnormalExit;      }    }

該方法是一個靜態方法,配置和運行新的服務主機,處理任何異常并將其寫入日志。該方法接收一個參數Action<HostConfigurator> configureCallback配置方法調用,返回應用程序主方法返回的進程的退出代碼。

四.總結

以上是介紹如何使用Topshelf組件創建簡單的Windows服務的方法,在這里只是一個簡單的介紹,沒有很深入的介紹,如果需要了解更多的東西,可以看源碼,畢竟是開源免費的組件,也是一個很不錯的組件。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲日本成人女熟在线观看| 亚洲精品视频免费在线观看| 精品国产欧美一区二区五十路| 久久国产精品久久久久久久久久| 久久91超碰青草是什么| 成人激情在线观看| 欧美成在线观看| 久久精品免费播放| 日韩一二三在线视频播| 国产综合在线看| 美女av一区二区三区| 91免费精品视频| 亚洲毛片在线看| 国产成人精品一区二区在线| 色偷偷噜噜噜亚洲男人的天堂| 成人亲热视频网站| 91夜夜未满十八勿入爽爽影院| 久久九九全国免费精品观看| 亚洲欧美一区二区激情| 91九色蝌蚪国产| 久久久久久久久91| 欧美激情一区二区三区成人| 久久色在线播放| 日韩国产高清视频在线| 日韩中文字幕精品| 国产精品久久国产精品99gif| 日韩中文字幕国产| 久久久久久久久久av| 欧美日韩中文字幕在线| 午夜精品一区二区三区在线播放| 久久这里只有精品视频首页| 最新69国产成人精品视频免费| 成人精品aaaa网站| 一本一道久久a久久精品逆3p| 欧美中文在线观看国产| 久久久久999| 成人a在线观看| 久久久人成影片一区二区三区观看| 欧美日韩国产第一页| 成人黄色激情网| 国产精品久久久久久久久粉嫩av| 亚洲精品v天堂中文字幕| 91精品国产高清久久久久久91| 色综合天天综合网国产成人网| 日韩电影免费在线观看中文字幕| 亚洲国产日韩欧美在线动漫| 在线国产精品播放| 国产精品嫩草视频| 国产精品免费一区豆花| 亚洲成人网av| 亚洲色图25p| 日韩中文字幕视频在线| 欧美在线中文字幕| 久久青草福利网站| 日韩免费不卡av| 亚洲午夜久久久影院| 国产在线高清精品| 亚洲乱亚洲乱妇无码| 尤物精品国产第一福利三区| 国产免费一区视频观看免费| 中文字幕一区二区精品| 欧美性猛交xxxx富婆弯腰| 亚洲欧美成人一区二区在线电影| 久久精品国产成人| 欧美日韩成人网| 精品亚洲一区二区三区在线播放| 亚洲成av人影院在线观看| 亚洲激情电影中文字幕| 九色精品美女在线| 欧美激情精品久久久久久| 曰本色欧美视频在线| 亚洲欧美日韩国产精品| 国产综合久久久久久| 成人伊人精品色xxxx视频| 大桥未久av一区二区三区| 日本一欧美一欧美一亚洲视频| 国产91色在线| 高清一区二区三区四区五区| 国产午夜一区二区| 亚洲美女激情视频| 亚洲aa在线观看| 免费不卡在线观看av| 国产成人综合一区二区三区| 欧美成年人视频网站| 国产在线精品成人一区二区三区| 性欧美亚洲xxxx乳在线观看| 欧美性生交xxxxx久久久| 91久久在线观看| 中文字幕一区二区精品| 精品久久久久久久久久ntr影视| 国产精品高潮呻吟视频| 日韩中文在线中文网三级| 日本精品久久久久久久| 久久久久久亚洲精品| 2019国产精品自在线拍国产不卡| 国产亚洲精品综合一区91| 77777少妇光屁股久久一区| 欧美夜福利tv在线| 91久久久久久久久| 九九精品在线观看| 欧美成人精品影院| 人人澡人人澡人人看欧美| 色噜噜狠狠色综合网图区| 国产精品久久久久久一区二区| 91在线观看免费高清完整版在线观看| 国产极品jizzhd欧美| 日韩一二三在线视频播| 俺也去精品视频在线观看| 欧美福利小视频| 亚洲人成电影网| 国产精品久久91| 国产日本欧美一区| 日韩欧美国产网站| 国产精品久久二区| 日韩欧美亚洲综合| 国产精品看片资源| 日韩精品在线播放| 欧美专区日韩视频| 国产91网红主播在线观看| 亚洲人成毛片在线播放| 欧美激情二区三区| 亚洲欧美成人在线| 国产精品亚洲第一区| 另类专区欧美制服同性| 欧美日韩成人黄色| 日韩最新av在线| 欧美激情精品久久久久久变态| 蜜臀久久99精品久久久无需会员| 国产网站欧美日韩免费精品在线观看| 国产一区二中文字幕在线看| 日本精品免费观看| 影音先锋日韩有码| 亚洲人成伊人成综合网久久久| 亚洲人a成www在线影院| 国产成人精品免高潮费视频| 亚洲a∨日韩av高清在线观看| 欧美亚洲另类视频| 亚洲色图第一页| 国产精品亚洲视频在线观看| 精品久久久久久久久中文字幕| 97免费在线视频| 欧美做爰性生交视频| 在线观看国产精品淫| 久久99热精品| 91人人爽人人爽人人精88v| 国产精品久久久久久久久久东京| 国产男女猛烈无遮挡91| 午夜美女久久久久爽久久| 亚洲色图欧美制服丝袜另类第一页| 久久成人综合视频| 日本三级久久久| 成人xxxxx| 亚洲第一精品夜夜躁人人躁| 亚洲成人免费网站| 国产精品igao视频| 久久久久久久久久久网站| 亚洲人成在线观| 97成人在线视频| 国产午夜精品一区二区三区| 国产精品av电影| 韩国国内大量揄拍精品视频| 精品国产乱码久久久久久天美| 国产区精品在线观看| 色中色综合影院手机版在线观看|