2

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

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

  1. 编写一个自定义成员资格提供程序,该提供程序包装 SQL 提供程序并为其提供自定义配置。
  2. 在 Web Role OnStart 方法中添加一些内容以更改 Web.config 文件中的连接字符串。

以前有没有人做过类似的事情,或者对哪个选项可能是最好的有建议,或者对如何实现这一点有其他想法?

4

1 回答 1

3

Windows Azure SDK 允许您在每个环境中拥有多个服务配置。但是 web.config 修改有点困难。在您的情况下,我建议您编写一些代码(或启动任务),从服务配置中读取连接字符串并将其写入 web.config。

Andy 的博文“在 WebRole Startup 上以编程方式修改 web.config ”准确解释了如何做到这一点:

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();
}
于 2012-06-21T20:44:40.153 回答