关于Hanselman关于新ASP.NET通用提供商的帖子: http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx
如何配置它来读取CSCFG文件的连接字符串而不是web.config?
答案 0 :(得分:0)
我认为你不能让Universal Providers从ServiceConfiguration中读取(而不是web.config)。但是,每次部署应用程序或每次修改ServiceConfiguration时,您可以使用ServiceConfiguration中的信息修改web.config。
在您的WebRole.cs中,您首先会编写一些执行此操作的代码。有一个topic on 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事件,更新这种更改的配置(你也可以阻止实例在这里重新启动)。