在我的web.config文件中,我有两个SQL Server连接字符串,一个用于本地,一个用于实时:
<connectionStrings>
<remove name="LocalSqlServer" />
<add name="LocalSqlServer" connectionString="[removed]" providerName="System.Data.SqlClient"/>
<add name="LiveSqlServer" connectionString="[removed]" providerName="System.Data.SqlClient"/>
</connectionStrings>
然后我有一个“utils”单例类,基本上设置连接字符串取决于我在“localhost”或我的实时服务器上运行网站:
if (Environment.MachineName.ToUpper() == MyOwnConfig.GetAppSettingsValue(ConfigKeys.localhost).ToUpper()) {
this.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString();
//MembershipProvider provider = Membership.Providers["LocalAspNetMemberSqlProvider"];
//RoleProvider role = Roles.Providers["LocalAspNetMemberSqlProvider"];
}
else {
this.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LiveSqlServer"].ToString();
//MembershipProvider provider = Membership.Providers["LiveAspNetMemberSqlProvider"];
//RoleProvider role = Roles.Providers["LiveAspNetMemberSqlProvider"];
}
我的数据库类只是使用了我的utils类的connectionString属性。所有这一切都很好,所以当我在本地放置网站时,我可以直接将其上传到实时,而无需更改配置文件中的连接字符串等,并开始使用我的实时数据库。
现在我正在将“成员资格”实施到我的网站中,而对于使用某些webmethods的ajax,我将providerUserKey存储在当前登录用户的文本字段中。然后我的web方法检查此密钥是否已通过身份验证。 e.g。
ajaxCreds.ajaxID1 = ((MembershipUser)Membership.GetUser()).ProviderUserKey.ToString();
问题: 我的问题是如何知道这个成员资格是来自LIVE数据库还是我的LOCAL数据库。正如您在Web配置中看到的那样,我已经在成员资格/提供程序行中添加了(注释掉了),但我不知道如何在上面的membership.getUser()命令中使用它们。
替代方案......这是一个好方法吗?或者上传到live时编辑web.config文件更简单吗?
非常感谢
答案 0 :(得分:1)
大多数人都没有这样做,虽然我为你把这一切都弄清楚而鼓掌。通常,人们使用Deployment Manager或其他一些构建系统在服务器上使用与本地不同的web.config值。
以下是有关更改部署的链接:How do I use Web.Config transform on my connection strings?
答案 1 :(得分:1)
我建议你阅读这篇文章:
http://blogs.msdn.com/b/schlepticons/archive/2010/07/22/modifying-asp-net-providers-at-runtime.aspx
它会告诉你,其他人也试图做类似的事情。这就是如何取得成功。解决方案(如果调整)可能与您的需求类似。
Membership
API将根据您的提供商密钥 注意:您必须调整void Application_Start(object sender, EventArgs e)
实施,但想法是
注意2:您要做的事情肯定是不是例外。基于环境的配置非常智能!必须实现的是标准API使用,例如通过经理模式调用
而不是按名称调用提供商。