【问题标题】: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

      【讨论】:

        【解决方案3】:

        似乎有一个受支持的修补程序,其实现与 Sachin 提到的文章相同(关闭网站中的文件更改通知)。

        查看this article in the microsoft KB了解更多信息。

        但由于您在评论中提到您无权访问服务器,我想这对您的情况也无济于事。

        【讨论】:

          【解决方案4】:

          尝试禁用文件系统的监控。这将阻止您的会话活动。 This article 可能对你有用。

          【讨论】:

            【解决方案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。它看起来就像一个真实的目录。

            【讨论】:

              最近更新 更多