【问题标题】:Viewing images in a web browser and then deleting them causes web server to restart在网络浏览器中查看图像然后删除它们会导致网络服务器重新启动
【发布时间】:2012-03-22 20:18:34
【问题描述】:

我正在使用 ASP.net MVC 3 和 ASP.net 开发服务器。

我的 Web 应用程序将图像文件从 Amazon S3 下载到会话文件夹中。用户随后会在其浏览器中看到这些图像,因为该应用的一个网页引用了这些图像。

如果我随后删除会话文件夹的内容并重新下载图像,应用程序将重新启动。

只有在我查看网页中的图像文件并在重新下载它们之前删除它们时,它似乎才会重新启动。因此,如果我不在网页中查看它们,我可以删除它们,再次下载,应用程序将不会重新启动。同样,如果我在网页中查看它们,请不要删除它们并在下载时直接覆盖它们,应用程序不会重新启动。

有什么办法可以让我删除它们,以便网络服务器不介意我重新下载它们吗?

我不想失去你看到的会话。

这里是删除代码...

    public static void EmptyFolder(string directory)
    {
        if (!Directory.Exists(directory))
        {
            return;
        }

        DirectoryInfo directoryInfo = new DirectoryInfo(directory);

        EmptyFolder(directoryInfo);
    }

    private static void EmptyFolder(DirectoryInfo directoryInfo)
    {
        foreach (FileInfo file in directoryInfo.GetFiles())
        {
            file.Delete();
        }

        foreach (DirectoryInfo subfolder in directoryInfo.GetDirectories())
        {
            EmptyFolder(subfolder);

            subfolder.Delete();
        }
    }

【问题讨论】:

  • 您能否发布有关如何删除会话文件夹中图像的示例代码?

标签: asp.net asp.net-mvc-3 webserver


【解决方案1】:

这是预期的行为;如果您删除网站文件夹上下文中存在的文件,IIS 将重新启动,以防它必须动态重新编译任何内容。

这与保存对 Web.Config 的更改相同。

如果问题太大,您需要将图像移到网站文件夹之外。

关于会话,你可以像我建议的那样移动资源,或者考虑切换到 SQL 会话存储,或者使用 ASP.Net 会话服务;这会断开它与网站的连接。

在浏览器中加载图像会导致 IIS 将其绑定到您的工作进程,可能是因为缓存,但我猜想询问会话文件夹在哪里是相关的。

您的文件夹结构是否与此类似?

c:\
   inetpub
   |__ + wwwroot
          |__ - MyWebSite
          |__ - SessionFolder

还是这个?

c:\
   inetpub
   |__ + wwwroot
          |__ - MyWebSite
                |__ - bin
                |__ - Content
                |__ - Scripts
                |__ - SessionFolder
                |__ - Views
                |__ - web.config
                |__ - global.asax

【讨论】:

  • 此链接包含有关如何更改会话状态存储的详细信息:msdn.microsoft.com/en-US/library/ms178586(v=vs.80).aspx
  • 那么是网络浏览器请求图像,使包含图像的文件夹成为网站的文件夹上下文吗?因为,正如我所说,如果我不使用网页查看图像,我可以在不重新启动应用程序的情况下删除它们。我最有可能使用的解决方案是使用 Guid 生成一个新的会话文件夹,而不是重复使用同一个会话文件夹(由会话 ID 标识)。
  • 在我的回答中添加了更多细节。
  • 是的,会话文件夹嵌套在 MVC 的区域文件夹中。
  • 那么为什么我可以通过网络浏览器查看图像(如您所说,让 IIS 将其绑定到工作进程),删除文件并重新下载覆盖原始版本的文件?如果 IIS 会在图像被删除时重新启动应用程序,那么为什么在它们被覆盖时不重新启动呢?
猜你喜欢
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 2020-05-23
  • 2012-12-23
  • 2015-12-01
  • 1970-01-01
  • 2012-04-06
相关资源
最近更新 更多