停止缓存可以防止安装clickonce安装程序?

时间:2010-09-21 00:04:44

标签: c# .net iis clickonce

我们通过HTTPS从IIS网站提供WCF点击一次安装应用程序。它位于另一个具有authenticaton(混合模式,窗口和窗体)但未应用于此文件夹的站点的子目录中。它还配置了一个非常高持续时间的静态缓存,这导致我们的WCF应用程序出现问题,因此我们在该文件中禁用了缓存,并且突然安装程序停止正常工作(如果你直接使用.application它工作)

我们找到了解决办法,设置一个5秒的缓存似乎解决了这个问题,但我想知道是否有人可以解释为什么会发生这种情况?修复它的配置更改是交换子文件夹中的web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="DisableCache" />
    </staticContent>  
 </system.webServer>
</configuration>

要:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00.00:00:05" />
    </staticContent>  
 </system.webServer>
</configuration> 

我们尝试改回来,问题再次出现,所以它不像应用程序池回收修复它那么简单。真正奇怪的是它没有发生在我们的暂存环境中,唯一的区别是它不是通过HTTPS提供的......

编辑:为了澄清这一点,我知道没有任何方法可以完全诊断这一点。我很高兴接受任何可能导致所述影响的理性解释,因为即使我尝试过,我也不认为我会产生这种效果......

2 个答案:

答案 0 :(得分:1)

您提到在暂存环境中未见此问题。您的暂存环境是否有可能影响文件缓存的其他代理差异?

您可能会看到这一点的一个可能原因是ClickOnce是否在HTTP响应中使用缓存控制标头,然后确定它应该如何(或者是否)缓存应用程序以及与ClickOnce应用程序关联的其他文件。您的第一个配置告诉客户端不缓存该文件。这与ClickOnce想要做的事情背道而驰。通过允许缓存文件 - 甚至5秒 - 您允许ClickOnce将文件保存在本地,然后从那时起,ClickOnce的缓存逻辑用于确定是否需要更新。

答案 1 :(得分:1)

解决方法看似合理但如果我想了解更多,我会使用FileMon配置ClickOnce安装程序并查看它的运行时依赖性。我猜它会假设文件将持久存储在客户端的缓存中而无法找到它们。