【问题标题】:Deleting a directory results in application restart删除目录会导致应用程序重新启动
【发布时间】:2010-10-04 21:39:57
【问题描述】:
我有一个包含 2 个目录(书籍和导出)的应用程序。
如果我们在应用程序中创建一本书或一本书的页面,则会添加一个带有页面 ID 的目录(这是用于上传资源)。
如果我们删除一个页面,该页面(及其目录)将从数据库和文件系统中删除。
但是,这会导致会话丢失(甚至是应用程序重新启动)。我在谷歌上查找了一些东西,发现了以下link。
这似乎是 ASP.NET 2.0(和 3.5)中的一个问题。
我们现在正在考虑编写一个可以在晚上清理目录的服务。
但是必须有另一种解决方案来解决这个问题吗?
哦,将目录放在虚拟目录之外不是一种选择。
【问题讨论】:
标签:
asp.net
session
directory
delete-directory
【解决方案1】:
我遇到了同样的问题。解决方案是使用 ASP.Net State 服务将会话处理外部化。唯一的缺点是您放置在会话中的每个对象都需要可序列化,因为它会被传输到状态服务并返回。
我目前无法提供更多链接,但 google 会帮助你,因为你知道要搜索什么。
【解决方案2】:
为了存储经常更新、创建和删除的数据文件,您需要使用网站根目录下的 App_Data 文件夹。 MSDN for App_Data 文件夹状态:
包含应用程序数据文件
包括 MDF 文件、XML 文件,如
以及其他数据存储文件。这
ASP.NET 2.0 使用 App_Data 文件夹
存储应用程序的本地
数据库,可用于
保持成员资格和角色
信息。
另请查看问答部分以了解 App_Data 文件夹的使用情况:App_Data folder question
【解决方案5】:
哦,把目录放在外面
虚拟目录不是
选项。
将目录放在虚拟目录之外是我找到的唯一解决方案(到目前为止)。您可以做的是在文件系统中创建一个链接(联结),以便该目录出现在虚拟目录中,例如:
- 我们的网站(虚拟目录)位于 C:\projectX\website
- 数据目录(我们创建/删除文件和文件夹的地方)位于 C:\projectX\data
- 然后我们创建一个链接,使数据文件夹以 C:\projectX\website\data 的形式提供
链接是使用程序 Linkd.exe(可在 windows 资源工具包中获得)创建的,使用以下命令:
linkd c:\projectX\website\data c:\projectX\data
现在 c:\projectX\website\data 是一个指向真实数据目录的链接/联结。您可以像使用物理目录一样使用该链接。
例如在您的网站中,您可以使用以下代码访问它:
Server.MapPath("~/data")
您还可以使用 windows 文件资源管理器并浏览到 C:\projectX\website\data。它看起来就像一个真实的目录。