我有一个使用ASP.NET SQL Membership提供程序的Web角色。目前,配置位于Web.Config文件中。我想将连接字符串配置为Web角色设置,而不是将其置于Web.Config中。我想这样做的主要原因是我可以在azure项目上设置配置以发布到不同的托管服务(dev,qa等)。现在,我每次都需要手动编辑web.config发布到其他服务。
我对如何实现这一点有几点想法。
之前有没有人做过这样的事情,或者建议哪个选项最好,或者对如何做到这一点有另一个想法?
答案 0 :(得分:3)
Windows Azure SDK允许您为每个环境提供多个服务配置。但web.config修改有点困难。在您的情况下,我建议您编写一些代码(或启动任务),从服务配置中读取连接字符串并将其写入web.config。
Andy的博客文章“Programmatically modify web.config on WebRole Startup”详细解释了如何做到这一点:
public override bool OnStart()
{
using (var server = new ServerManager())
{
// get the site's web configuration
var siteNameFromServiceModel = "Web"; // TODO: update this site name for your site.
var siteName =
string.Format("{0}_{1}", RoleEnvironment.CurrentRoleInstance.Id, siteNameFromServiceModel);
var siteConfig = server.Sites[siteName].GetWebConfiguration();
// get the appSettings section
var appSettings = siteConfig.GetSection("appSettings").GetCollection();
AddElement(appSettings, "deploymentId", RoleEnvironment.DeploymentId);
AddElement(appSettings, "internalEndpointPort", RoleEnvironment.CurrentRoleInstance.InstanceEndpoints
.First(t=>t.Key=="InternalEndpoint1").Value
.IPEndpoint.Port.ToString());
server.CommitChanges();
}
return base.OnStart();
}