如何刷新代理服务缓存的ASPX页面和Javascript代码



问题

最近,我将一个包含javascript的页面部署到生产环境中,该页面每隔几秒钟就使用setInterval()ping一次Web服务。行为可以总结如下:

每隔X秒,即将出现的Events.aspx页面上的Javascript就会调用hitWebService()函数,该函数位于hitWebService.js文件中。

事实证明,X间隔值集太小,因此,我删除了对hitWebService()、hitWebService.js文件本身以及它试图访问的web服务的所有引用。

从正常IP地址访问web服务的尝试减少了,但我仍然收到许多使用代理服务的用户的尝试。

我的理论是,我即将推出的Events.aspx和hitWebService.js已经被代理服务缓存。事实上,当我在用户点击错误页面时记录引用字符串时(每隔一段时间,其中一个用户就会被重定向到这里),它们是从即将到来的Events.aspx.中引用的

问题是,尝试访问此web服务会以令人不舒服的速度填充IIS日志,并在服务器上造成不必要的流量。

我尝试过的

  • 完全删除web服务
  • 删除hitWebService.js文件,并将其替换为伪文件
  • 已更改IIS上的内容过期时间,以便内容立即过期
  • 将Response.Cache.SetCacheability(HttpCacheability.NoCache)添加到页面上的.vb代码绑定中
  • 完全重新发布的网站
  • 已重新启动IIS,已停止并启动IIS

有趣的比特

  • 我可以更改UpcomingEvents.apsx上的vb codeehind来记录会话详细信息等,它似乎几乎可以立即为代理服务用户更新

问题

如果我的理论是正确的,并且代理服务器确实在缓存这些文件hitWebService.js和upcomingEvents.aspx,那么考虑到上述策略没有奏效,我还有其他途径可以强制刷新代码吗?

非常感谢

在我的例子中,asp.net缓存了一个ajax调用begin。我使用了一个带有javascript日期号的param,因此每个调用都有不同的查询字符串。

像这样:

function addQueryStringAntiCache(url)
{
var d = new Date();
var n = d.getTime();
return url + (url.indexOf("?") == -1 ? "?" : "&") + "nocache=" + n;
}

你可以对脚本做同样的事情:

<script src="myScript.js?v=8912398314812" />

如果你可以访问这台机器,请使用fiddle检查它——浏览器甚至会调用它来获取文件,或者如果它使用自己的缓存。在这种情况下,你可以尝试包括元数据或http头以防止它缓存它。检查此响应

希望它能帮助你。

最新更新