1

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

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

4

1 回答 1

0

我不认为你可以让通用提供者从 ServiceConfiguration 中读取(而不是 web.config)。但是您可以做的是在每次部署应用程序或每次修改 ServiceConfiguration 时使用来自 ServiceConfiguration 的信息修改 web.config。

在您的 WebRole.cs 中,您将首先编写一些执行此操作的代码。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事件,以更新此类更改的配置(您也可以在此处阻止实例重新启动)。

于 2012-08-01T04:02:40.630 回答