IIS6 + ASP.NET + SQLite
一个页面在服务端使用了Session,在本地测试一切正常,放到服务器时老提示:"服务器不能处理这类请求!"。重装.NET Framework无解,由于代码比较多,一时也没法判断是哪出了问题。
换台服务器测试,发现返回相同的错误,排除服务器环境问题
通过断点+return方式逐步排查代码,耗时一天未找到具体出错位置
第二天继续排查,测试到操作数据库模块时发现异常,定位到问题位置
疑惑为什么每次执行完数据库操作Session就丢失
怀疑SQLite版本问题,从官网下载最新版DLL替换,问题依旧
意外删除bin下所有文件(包括数据库文件),使用根目录备份数据库重新配置
测试发现一切正常,Session不再丢失
对比bin文件夹发现少了db.db文件,即数据库文件从bin移到了根目录
尝试将db.db配置回bin下,问题重现:"服务器不能处理这类请求!"
根本原因:ASP.NET下的bin文件夹一旦被修改就会引起站点重启,Session自然也会丢失。刚好数据库文件放在bin下,操作数据库时SQLite文件会发生变化,由此导致Session变null。
解决方法:将数据库文件从bin目录移动到网站根目录或其他非bin目录下,避免数据库操作引起bin目录文件变化导致的站点重启。
ASP.NET机制:bin目录文件变化会触发应用程序域重启
Session特性:应用程序重启会导致Session丢失
最佳实践:数据库文件不应放置在bin目录下
教训:对.NET的基本常识了解还不够
希望能帮到遇到类似问题的朋友!