人们经常讨论我们是否需要理解组件或语言的基本原理。其实我个人认为每个人对这个问题都有自己的看法,在不同的个人情况下选择的方式也会有所不同。我个人觉得无论学什么都要努力理解相应的原理和源代码(不要急着在这里吐槽,让我说完)。了解底层不是让你写类似的东西,你也不可能写出来。重写一个需要修改整个底层结构。了解底层只是让你在编写业务代码时选择合适的方式,让底层和业务层能够协同工作,达到最佳的效率。任何方式都有好坏之分,需要适当的选择。
如果你觉得楼主上面的说法不对,或者有什么不对的地方,还是可以希望原谅我的,因为争论一个观点是没有意义的,认为对的人自己会理解,认为不对的可以忽略。没有必要花时间和精力讨论这样的事情。
胡说八道。我们开门见山吧。之前我们介绍了一个组件,Hangfire,用来设置预定任务等等。这里我们介绍另一个组件,Topshelf。
一、托普希尔组件概述
Topshelf是的Windows服务框架。NET平台。Topshelf可以轻松创建、测试和调试Windows服务,最后安装到Windows服务控制管理器(SCM)中。Topshelf支持交互细节,允许开发人员专注于服务逻辑,而不是与。NET框架。开发人员不需要知道服务类的复杂细节,不需要通过InstallUtil执行安装,也不需要知道如何为服务附加调试器来排除问题。
创建窗口服务类似于创建控制台应用程序。创建控制台应用程序后,会创建一个带有公共Start和Stop方法的服务类。服务操作有自动、自动(延时)、手动、禁用启动选项等多种方式:本地系统、本地服务、网络服务、安装时提示的用户名/密码或服务证书。服务启动依赖项(包括SQL Server、MSMQ和其他具有不同服务名称的多实例服务)安装服务恢复选项,包括重新启动、重新启动或运行程序。Topshelf与Mono合作,将服务部署到Linux。服务安装目前仅限于Windows。
二.Topshelf使用说明
在介绍了相应组件的背景概述之后,我们将在这里介绍如何使用该组件。还有另一种方法来使用这个组件,所有这些都在HostFactory类中。这里有一个具体的使用方法。
1.配置新的服务主机
主机工厂。New(x={//)可以定义不需要接口依赖关系的服务,这仅用于//display,在本例中不使用。x . service samplessainterfaceservice(s={ s . constructioning(()=new samplessainterfaceservice());启动时(v=v . Start());停止时(v=v . Stop());});});2.配置并运行新的服务主机,处理任何异常并将它们写入日志
主机工厂run(x={ x . UseLog4 net(' log4 net。config’);x . UseAssemblyInfoForServiceInfo();bool throwOnStart=false bool throwOnStop=false bool throwUnhandled=false x。服务(设置=新的SampleService(throwOnStart、throwOnStop、throwUnhandled),s={ s . beforeststartingservice(_=Console .写行(' before start ');s . beforeststopingservice(_=Console .写行(' BeforeStOp ');});x.SetStartTimeout(TimeSpan .从秒(10));x .设置停止超时(时间跨度.从秒(10));x . EnableServiceRecovery(r={ r . ReSTARTServiCe(3);r.RunProgram(7,' ping Google。com’);r.RestartComputer(5,"消息");r . OnCrashOnlY();r . setresetpperiod(2);});x . AddCommandLineSwitch(' throwOnStart ',v=throwOnStart=v);x . AddCommandLineSwitch(' throwOnStop ',v=throwOnStop=v);x . AddCommandLineSwitch(' throw unhandled ',v=throw unhandled=v);x . OnException((异常)={控制台.WriteLine(“”引发异常-'异常。消息);});});3.Topshelf配置操作方法
三Topshelf .核心对象解析
承接上文,介绍完毕相关背景和常规操作,在这里介绍一个核心对象的一些方法。
1.主机工厂。新():
公共静态主机新建(操作主机配置器配置回调){尝试{如果(配置回调==null)引发新的ArgumentNullException(' configureCallback ');var configurator=new host configurator impl();类型声明类型=配置回调.方法。声明类型;if (declaringType!=null){ string DefaultServiCename=declaring type .命名空间;if(!字符串IsNullOrEmpty(DefaultServiCename))配置器SetServiceName(DefaultServicename);}配置回调(配置器);配置器ApplyCommandLine();配置结果结果=验证配置结果。编译器结果(配置器validate());如果(结果。消息。长度0) {主机记录器获取(类型为(主机工厂))。信息格式('配置结果:n{0} ',结果。消息);}退货配置程序创建主机();} catch(异常ex) { HostLogger .获取(类型为(主机工厂))。错误('创建主机时出现异常,例如);主机记录器。关机();扔;} }该方法用于配置新的服务主机,方法接受一个参数ActionHostConfigurator配置方法调用,该方法返回圣体对象,表示Topshelf服务主机,准备运行配置回调。方法。声明类型;用于获取声明该成员的类声明类型。命名空间;用于获取获取系统。类型的命名空间验证配置结果。编译器结果(配置器validate());用于验证配置结果。
2.主机工厂。运行():
公共静态tofelexitcode Run(ActionHostConfigurator configureCallback){ try { return New(configureCallback)).run();} catch(异常ex) { HostLogger .获取(类型为(主机工厂))。错误('服务异常终止,例如);主机记录器。关机();返回TopshelfExitCode .异常退出;} }该方法是一个静态方法,配置和运行新的服务主机,处理任何异常并将其写入日志。该方法接收一个参数操作主机配置器配置回调配置方法调用,返回应用程序主方法返回的进程的退出代码。
四。总结
以上是介绍如何使用Topshelf组件创建简单的Windows操作系统操作系统服务的方法,在这里只是一个简单的介绍,没有很深入的介绍,如果需要了解更多的东西,可以看源码,毕竟是开源免费的组件,也是一个很不错的组件。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。