在WindowsAzure上部署WindowsService程序并启动
当你已经在WindowsAzure上部署了一个WebRole后,发现随着使用量的增多,在数据库中会存在很多的无效数据,于是,会打算定期删除数据库中的无效数据。此时,就需要在Azure的虚拟机上部署一个自己的小程序来实现此动作,当然,实现此删除数据的小程序多种多样,部署方式也多样,此文仅仅是虚拟此需求来提出一种在WindowsAzure上部署自己的WindowService的方法。
1、 在一个WebRole的应用中,添加WindowsService程序。
如上图,添加一个MyApp的文件夹,把已经编译好的AgentService.exe的WindowsService程序复制到该文件夹中,同时,再添加一个installsvc.cmd文件来安装该WindowsService程序。
installsvc.cmd文件内容如下:
%WinDir%\Microsoft.NET\Framework\v4.0.30319\Installutil.exe MyApp\AgentService.exe
NET START AgentService
2、 设置MyApp文件夹中的文件的“复制到输出目录”为“常复制”。
3、 启动该WindowsService程序。
在.csdef文件中添加添加一个Task,用它来调用安装服务的脚本。
<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="WindowsAzureProject1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WebRole name="MvcWebRole1" vmsize="Small"> <Sites> <Site name="Web"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Imports> <Import moduleName="Diagnostics" /> </Imports> <Startup> <Task commandLine="MyApp\installsvc.cmd" executionContext="elevated" taskType="background" /> </Startup> </WebRole> </ServiceDefinition>
现在就可以把该WebRole上传至WindowsAzure上,同时在该Role的实例虚拟机上也注册和启动了我们的WindowsService程序。
另外,在Azure Role节点中添加如下的节点,可以提高Role的执行权限,用于解决一些因为权限不足的问题。
<WebRole name="MvcWebRole1" vmsize="Small"> <Runtime executionContext="elevated"></Runtime> </WebRole>
参考文章:
http://blogs.msdn.com/b/luispanzano/archive/2011/03/19/instalar-un-servicio-windows-en-azure.aspx