在Azure上动态创建WebSite
本文将介绍一种在已经部署的WebRole上动态创建一个WebSite的方法。当然,也可以使用Role的部署文件包来一同创建多个WebSite或多个Web虚拟目录,关于这种方法请参考我的另一篇文章《WindowsAzure上把WebApp和WebService同时部署在一个WebRole中》。
1、 提升WebRole的权限为管理员权限。
在ServiceDefinition.csdef文件中追加下面的配置。
<WebRole name="MvcWebRole1" vmsize="Small"> <Runtime executionContext="elevated"></Runtime> </WebRole>
2、防火墙上的端口屏蔽。
在我们采用常规手段部署Site的时候,我们的应用程序要么使用相同的端口不同的HostName,要么使用不同的端口相同的IP地址。在Azure上,由于Azure只在部署文件包部署的时候在防火墙中打开了固定的端口(远程桌面连接的端口除外),所以,此处使用不同端口的方式很难行得通,没办法,我们也只有采用相同端口不同HostName的方式动态创建WebSite了。可以在Window Azure Management Portal查看哪个端口是开放的。
3、Microsoft.Web.Administration程序集
在创建WebSite的代码中需要引用Microsoft.Web.Administration程序集,该程序集在%WinDir%\System32\InetSrv目录中。由于在AzureHost的GAC中默认不包含该程序集,所以,需要把该程序集的Copy Local属性设置为true。
4、动态创建WebSite的代码
string newWebsitePath = "Your app path"; using (ServerManager serverManager = new ServerManager()) { /* 创建 application pool */ ApplicationPool applicationPool = serverManager.ApplicationPools.Add("MyApplicationPool"); applicationPool.AutoStart = true; applicationPool.ManagedPipelineMode = ManagedPipelineMode.Integrated; applicationPool.ManagedRuntimeVersion = "v4.0"; /*创建 web site */ Site site = serverManager.Sites. Add("MyNewSite", "http", "*:80:www.mysite.com", newWebsitePath); site.Applications[0].ApplicationPoolName = "MyApplicationPool"; site.ServerAutoStart = true; serverManager.CommitChanges(); }
5、测试动态创建的WebSite
这也很简单,首先请在Window Azure Management Portal中找到你部署的WebRole的Ip地址,然后打开C:\Windows\System32\drivers\etc\hosts文件,比照如下的格式增加一条记录。
111.222.333.444 www.mysite.com
然后,在你的浏览器中输入www.mysite.com,看是不是已经看到你动态创建的Site了。