ASP.NET - 为啥会突然找不到数据库文件?
Posted
技术标签:
【中文标题】ASP.NET - 为啥会突然找不到数据库文件?【英文标题】:ASP.NET - why would database file suddenly not be able to be found?ASP.NET - 为什么会突然找不到数据库文件? 【发布时间】:2013-01-22 14:11:52 【问题描述】:我正在使用 Microsoft SQL Server CE 构建一个 ASP.NET 应用程序,该应用程序需要一次运行一个进程 24 小时。昨天我开始了通宵测试。在凌晨 2:30 左右,它抛出了以下异常:
找不到数据库文件。检查数据库的路径。 [数据源=]
这是正在运行的代码 sn-p。它是我用于数据访问的辅助库:
public class DataHelper
private string _connectionString = ConfigurationManager.ConnectionStrings["myConnString"].ConnectionString;
public void ExecuteNonQuery(string SQL)
using (SqlCeConnection _conn = new SqlCeConnection(_connectionString))
_conn.Open();
using(SqlCeCommand _cmd = new SqlCeCommand(SQL, _conn))
_cmd.ExecuteNonQuery();
然后我的 web.config 中有这个
<configuration>
<connectionStrings>
<add name="myConnString" connectionString="data source=|DataDirectory|\myDB.sdf"/>
</connectionStrings>
对于我的测试,我使用 Visual Studio 开发 Web 服务器(不是 IIS)运行 ASP.NET 应用程序。该应用程序运行良好 12 小时多一点。然后突然之间它抛出了上述异常。有什么想法为什么突然找不到数据库?我的第一个想法是VS开发Web服务器回收了应用程序池或其他东西,现在系统丢失了连接字符串。
【问题讨论】:
我不得不问,你为什么要编写一个 ASP.NET 应用程序来运行一个进程 24 小时?这是一项更适合 Windows 服务、控制台应用程序或 WinForms 应用程序的任务。 ASP.NET 不是为此类事情而设计的,您可能会遇到异常行为。 IIS 重置、应用程序池重置等。有太多不可预测的事情需要处理,而这些事情在其他应用程序类型中不是一个因素。即使在 Cassini(Visual Studio Web 服务器)而不是 IIS 中运行时,您也可以预料到长时间运行的进程会出现问题。 我在某种程度上继承了这一点,并且已经做出了架构决策。我们已经在计划使用您提到的具有不同架构的版本 2。但是现在我必须尽我所能来完成这项工作。 我希望有人能够回答你的问题,但我强烈怀疑答案与 ASP.NET 和长时间运行的进程的固有问题有关,唯一的答案是打破将长时间运行的进程放到一个单独的应用程序中。值得庆幸的是,将 asp.net 代码移植到 OCnsole 应用程序并不太难,但我希望您能找到一个更简单的答案。祝你好运! (真诚的意思,而不是讽刺)。 不知道这是否有帮助,但可能值得尝试删除 |DataDirectory|并将其替换为完整路径。也许是 |DataDirectory|变量不知何故丢失了。 是的,我已经在考虑将代码拆分为 Windows 服务。我唯一不明白的是如何在主 ASP.NET 应用程序和 Windows 服务之间来回通信。我的第一个想法是使用数据库作为中间人。但必须有更好的方法。感谢您的帮助,因为我正在尝试以前从未做过的事情。 【参考方案1】:不确定这是否真的是对原始问题的回答,但我最终将长期运行的应用程序的内容拆分为托管在 Windows 服务中的 WCF 服务。现在我没有遇到原来的问题了。
【讨论】:
以上是关于ASP.NET - 为啥会突然找不到数据库文件?的主要内容,如果未能解决你的问题,请参考以下文章
ASP.net HTTP 404 - 找不到文件而不是 MaxRequestLength 异常
ASP.NET MVC:404 - 找不到文件或目录。您正在寻找的资源
RSACryptoServiceProvider CryptographicException 系统找不到 ASP.NET 下指定的文件