从Web角色设置配置ASP.NET SQL成员资格提供程序

时间:2012-06-21 20:21:53

标签: asp.net azure asp.net-membership sqlmembershipprovider

我有一个使用ASP.NET SQL Membership提供程序的Web角色。目前,配置位于Web.Config文件中。我想将连接字符串配置为Web角色设置,而不是将其置于Web.Config中。我想这样做的主要原因是我可以在azure项目上设置配置以发布到不同的托管服务(dev,qa等)。现在,我每次都需要手动编辑web.config发布到其他服务。

我对如何实现这一点有几点想法。

  1. 编写一个自定义成员资格提供程序,它包装SQL提供程序并为其提供自定义配置。
  2. 在Web角色OnStart方法中添加一些内容以更改Web.config文件中的连接字符串。
  3. 之前有没有人做过这样的事情,或者建议哪个选项最好,或者对如何做到这一点有另一个想法?

1 个答案:

答案 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();
}