明辉站/技术开发/内容

构建一个“即插即用”的XML Windows Service

技术开发2023-08-04 阅读
[摘要]Windows Services(以前被称为NT services)是在后台的Windows server 或workstation上运行的程序。在进行一些适当的设置以后,它们便可以在电脑重启之后自动开启,而无需进行人工干预。这同样适用于那些需要定期执行的长时间程序。 这里我将介绍一种Timer ...
Windows Services(以前被称为NT services)是在后台的Windows server 或workstation上运行的程序。在进行一些适当的设置以后,它们便可以在电脑重启之后自动开启,而无需进行人工干预。这同样适用于那些需要定期执行的长时间程序。

这里我将介绍一种Timer Windows Service,它使你只需简单地将一个assembly拖到适当的应用程序文件夹中便能够自动实现将不同的.NET组件插入其中。更确切地说,Timer Windows Service允许一些完成特定功能的组件定时运行。这在你需要频繁调用一个Web service以便获得天气、股票或新闻等信息或者在你经常需要对一个Web页面进行screen-scrape来汲取数据时会非常有用。你还可以用Timer Windows Service 来查看FTP站点上的新的普通文件(flat file)或者XML文档,以及成千上万个任务中的一个。这个可下载的程序包括三种执行这一任务的“可插入”组件:

在重复的基础上调用Weather Web service,并将结果存储到XML文件中。
在重复的基础上调用Stock Quote Web service,并将结果存储到XML文件中。
Screen-scrape(使用常规表达式)一个由system-monitoring package生成的Web页面,并将结果存到XML文件中。


你可以通过将一个条目添加到XML配置文件中来将自定义组件插入Windows Service,然后将自定义assembly放到Windows Service的程序文件夹中: <ServicesConfiguration>
<!-- key: Assembly name
value:Type (including namespace)-->
<Services>
<add key="EBCWeatherService.dll"
value="EBCServices.EBCWeatherService.
WeatherService" />
<add key="EBCStockQuoteService.dll"
value="EBCServices.EBCStockQuoteService.
StockQuoteService" />
<add key="EBCSiteScopeService.dll"
value="EBCServices.EBCSiteScopeService.
SiteScopeService" />
</Services>
<!-- more configuration data follows -->
</ServicesConfiguration>




Windows Service会对配置文件的改变进行监视,并且它会自动将新的assembly添加到处理过程中而无需重启机器。这种情况是可能的,因为每个自定义组件均实现了一个名为IService的接口,它定义了两个分别叫做StartTimer()和StopTimer()的方法。当配置文件改变以后,Windows Service会自动通过调用StopTimer()来终止所有组件的行为,并加载定义在配置文件中的适当的类型,然后调用每个对象的StartTimer()方法。该程序支持通过代理来调用远程程序及Web services、给每个控件提供可变计时器、自动记录事务日志、定制XML配置文件等等功能。

如果你想试用这个Timer Windows Service以及其它相关组件,你可以下载该MSI文件,运行它,在Control Panel中找到Services并启动名为EBCWindowsService的service。点此下载Timer Windows Service的完整代码及其相关组件。当然前提是你要安装了.NET Framework才行。

你还要确保你的service被赋予了能够将从Web services 中读取的数据保存到XML文件中的权限。如果你在使用代理服务器,你需要将必要的代理信息添加到安装了Windows Service(在安装时指定的位置上)的XML配置文件(名为EBCWindowsService.exe.config)中。该文件中包含许多组件,它们用来对每种配置文件的设置进行解释。

如果你编写了其他实现了Iservice的组件且可以插入到Timer Windows Service中,请写信与我联系dwahlin@xmlforasp.net。如果你的组件能够提供一种其他组件能够利用的service,我将会把它添加到安装包中并放到XML for ASP.NET Developers Web site里。


关于作者:


Dan Wahlin著有XML for ASP.NET Developers(Sams)一书,并创办了Wahlin Consulting公司,这家公司主要致力于XML和Web Service的咨询和培训。Dan也管理XML for ASP.NET Developers网站:www.XMLforASP.NET。要了解更多信息,请访问www.xmlforasp.net/content.asp?content=dan。

……

相关阅读