在我的 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"];
}
然后我的 Database 类只使用我的 utils 类的 connectionString 属性。所有这一切都很好,因此当我将站点放置在本地时,我可以简单地将其上传到现场,而无需更改配置文件中的连接字符串等,并且它开始使用我的实时数据库。
现在,我目前正在我的网站中实现“会员资格”,并且对于使用一些 webmethods 的 ajax,我将 providerUserKey 存储在当前登录用户的文本字段中。然后,我的 Web 方法会检查此密钥是否已通过身份验证。例如
ajaxCreds.ajaxID1 = ((MembershipUser)Membership.GetUser()).ProviderUserKey.ToString();
问题:我的问题是我如何知道这个成员是来自 LIVE 数据库还是我的 LOCAL 数据库。正如您从网络配置中看到的那样,我已在成员资格/提供者行中添加(已注释掉),但我不知道如何将它们与上述成员资格.getUser() 命令一起使用。
替代方案...这是一个好方法吗?或者当我上传到现场时编辑 web.config 文件是否更简单?
非常感谢