1

我创建了一个 aspx 页面并在 Firefox 和 Chrome 中查看它,它运行正常,运行 C# 代码。但是当我对页面进行更改(包括删除所有内容并提供空白页面)时,两个浏览器都继续显示原始编译的 aspx 页面!

尽管对 aspx 文件进行了更改,但似乎 ASP.Net(Web 服务器)并未重新编译。让它重新编译的唯一方法是更改​​ web.config 然后重新启动 Web 服务器!

我什至添加了以下代码,但它仍然加载原始页面:

<script runat="server">
Sub Page_Load
    Random rd = new Random();
    Response.AddHeader("ETag", rd.Next(1111111, 9999999).ToString());
    Response.AddHeader("Pragma", "no-cache");
    Response.CacheControl = "no-cache";
    Response.Cache.SetNoStore();
    Response.Expires = -1;
End Sub
</script>

我为排除浏览器缓存所做的测试:

  1. 创建了一个 aspx 页面并仅在 firefox 中加载它(而不是在 chrome 中)
  2. 更改了 aspx 文件
  3. 在 Firefox 中再次加载 aspx 但没有任何变化
  4. 在 Chrome 中加载它(有史以来第一次),它仍然显示旧版本!

使用 Apache 和 Mono,而不是 IIS

4

3 回答 3

2

这似乎是 Linux 上的 Mono+Apache 问题。它看不到对已编译页面的更改。唯一的解决方法是:

  1. 重新启动 Apache 网络服务器(这会导致它看到它们已更改) - 只需大约 2 秒

  2. 删除“/tmp/www-data-temp-aspnet-0/”中的临时文件(这可能有点错误,所以#1 是更好的选择)

于 2013-01-18T21:01:22.080 回答
0

检查您的 Web 应用程序是Web Application项目还是Web Site项目。如果它是一个 Web 应用程序,则每次更改某些内容时都需要编译,而网站项目允许更改无需编译即可反映。此外,您可以Ctrl+F5在浏览器中使用来获取页面的非缓存副本。希望他的帮助。

在此处阅读详细信息

于 2012-12-18T05:22:59.003 回答
0

简短回答:这是浏览器的错,这是设计的预期行为。在浏览器中强制刷新缓存(IE 中的 Ctrl-F5)。

更正:当它是 Mono/Apache 堆栈时,而不是 IIS。然后手动重启可能是唯一的解决方法。在 IIS 中,陈旧的影响会在不活动期间自然清除,此时服务器会终止空闲进程。在 Mono 中,可能有也可能没有相同的清洁计划,因此,流程生命周期和配置是首先要查看修复的地方。

不重新编译的行为是由请求页面的复杂标识引起的。身份包括 URL、时间戳和会话。如果您尝试在不关闭浏览器的情况下刷新页面,那么 ASP 服务器将需要提供旧的已编译页面的陈旧副本,因为服务器会尝试保持服务页面与现有会话、视图状态,甚至可能存在于客户端上的客户端脚本的一致性在部分更新之间,等等。此外,浏览器旨在遵守缓慢变化的互联网页面,将副本存储在缓存中并保持副本的年龄以跳过不必要的网络旅行。否则互联网会慢 10 倍。

其他注意事项:通过 ASP 服务器推送最慢的文件是 css 文件。

于 2012-12-18T05:23:37.863 回答