我有这个旧的asp.net应用程序,由于某些原因我不会进入这里,它已经在错误的数据库上运行。
我们目前没有为构建服务器提供任何规定,我只是在寻找一种快速方法来防止在我的global.asax中的代码检测到db不是生产数据库时加载应用程序。
我使用这样的东西:
foreach (ConnectionStringSettings s in ConfigurationManager.ConnectionStrings)
{
if (s.ConnectionString.Contains(ProdDataBaseServer) == ValidateCondition)
return false;
}
我的问题是,有更好的方法可以做到这一点,全球asax中的哪个事件最适合处理此检查?
提前致谢
乙
答案 0 :(得分:0)
叫我迷信(通过各种方式),但如果可以避免,我不想完全依赖Session_start或Application_start。我仍然不相信每次用户出现在网站上时都会发生这种情况(因为大约15年前左右就会出现已知问题)。
如果您正在使用Pages继承的某种形式的Base-object,您可以在某些早期事件中执行检查,例如Base-Page类的OnInit。 或者,如果您在每次页面调用时执行某种类型的用户验证,则可以与用户检查一起执行数据库检查。 我可能会将用户重定向到一个(html)页面,该页面显示"网站已关闭",并终止他们的会话以及所有这些。
或者,如果这个问题在运行时没有发生,但总是因为开发人员在执行发布之前忘记更改代码,您可以在编译时解决它。你可以在建造后立即进行检查;运行一个post build脚本,检查你的web.config是否包含某个字符串,该字符串对于正确(或错误)的数据库是唯一的。
if (theFileAsString.Contains("Data Source=THE_WRONG_ONE")){
// Perform actions to inform user that this compilation should not be released
}