ASP.NET Universal Providers + Azure CSCFG

时间:2012-08-01 03:07:05

标签: asp.net azure web-config asp.net-membership

关于Hanselman关于新ASP.NET通用提供商的帖子: http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx

如何配置它来读取CSCFG文件的连接字符串而不是web.config?

1 个答案:

答案 0 :(得分:0)

我认为你不能让Universal Providers从ServiceConfiguration中读取(而不是web.config)。但是,每次部署应用程序或每次修改ServiceConfiguration时,您可以使用ServiceConfiguration中的信息修改web.config。

在您的WebRole.cs中,您首先会编写一些执行此操作的代码。有一个topic on MSDN有点解释你如何做到这一点:

  • 以高架模式运行
  • 参考%WINDIR%\ system32 \ inetsrv \ Microsoft.Web.Administration.dll
  • 将此内容写入OnStart方法(您需要更改此代码):

    using (var server = new ServerManager())
    {
        // get the site's web configuration
        var siteNameFromServiceModel = "Web"; // 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()
            .ToDictionary(e => (string)e["key"], e => (string)e["value"]);
    
        // reconfigure the machine key
        var machineKeySection = siteConfig.GetSection("system.web/machineKey");
        machineKeySection.SetAttributeValue("validationKey", appSettings["validationKey"]);
        machineKeySection.SetAttributeValue("validation", appSettings["validation"]);
        machineKeySection.SetAttributeValue("decryptionKey", appSettings["decryptionKey"]);
        machineKeySection.SetAttributeValue("decryption", appSettings["decryption"]);
    
        server.CommitChanges();
    }
    

现在本主题未涉及的是ServiceConfiguration的更改(假设您在不重新部署的情况下从门户网站修改连接字符串)。这就是为什么你还需要处理RoleEnvironment.Changing事件,更新这种更改的配置(你也可以阻止实例在这里重新启动)。