按照 Hanselman 关于新 ASP.NET 通用提供程序的帖子: http ://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx
您将如何配置它以读取 CSCFG 文件的连接字符串,而不是 web.config?
按照 Hanselman 关于新 ASP.NET 通用提供程序的帖子: http ://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx
您将如何配置它以读取 CSCFG 文件的连接字符串,而不是 web.config?
我不认为你可以让通用提供者从 ServiceConfiguration 中读取(而不是 web.config)。但是您可以做的是在每次部署应用程序或每次修改 ServiceConfiguration 时使用来自 ServiceConfiguration 的信息修改 web.config。
在您的 WebRole.cs 中,您将首先编写一些执行此操作的代码。MSDN 上有一个主题可以解释如何做到这一点:
在 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事件,以更新此类更改的配置(您也可以在此处阻止实例重新启动)。