1

我正在尝试将静态 .html 页面用于遇到大量流量峰值的网站。该网站是一个MVC3应用程序。静态 .html 页面的目录结构如下:

approot
|---content
        index.html
    |---staticpages
            page1.html
            page2.html
            page3.html

我已将 defaultDocument 设置web.config"content/index.html". 如果我只是在项目中包含 .html 文件并部署应用程序,它运行良好。

我们要做的是将所有的 html 文件作为 blob 放入存储容器中。后台任务(在 WebRole 中运行)会定期检查任何更新的文件。后台任务还会在服务器启动时检查 .html 文件是否存在或是否需要更新。理想情况下,我们宁愿不必在项目中包含 .html 文件,而是在服务器启动时从存储中获取它们。

后台任务拉下文件并将它们放在正确的目录中就好了。但是,当尝试访问 www.mysite.com 上的网站时,IIS 会返回403错误。如果我们尝试访问任何其他 .html 页面,我们会收到404错误消息。MVC在本地开发环境中测试应用程序时不会发生这种情况。

当我在 中打开目录浏览时IIS,在获取站点目录时不会出现任何文件或目录。再次使用像 www.mysite.com 这样的域。

如果我确实在webrole项目中包含了 .html 文件,然后尝试在存储中更新一个文件,blob则会从存储中提取IIS该文件,但会提供旧页面。我已删除浏览器缓存以确保这不是问题。新文件正在服务器上正确更新。我已经将它复制到我的本地机器并查看了它,它确实是更新版本。

因此,从我目前可以推断的情况来看,似乎Azure caches整个网站都已部署并且似乎不允许更改内容。

有没有办法强制Azure识别更改,或者每当静态 .html 页面发生更改时我们将被迫重新部署?

4

1 回答 1

1

当您部署 webrole 以在 Azure 上运行时,它实际上打包了您的 Web 角色的两个副本。一个在 AppRoot 下结束,一个在 SitesRoot 下结束。

您的 WebRole.OnStart 进程在 AppRoot 中运行,但您的网站实际上是从 SitesRoot 中的副本提供的。因此,问题在于您的代码正在愉快地运行并从 blob 存储中复制文件,但它们位于 AppRoot 下,因此对您的站点不可见。

您需要在 global.asax 中启动一个线程来进行复制或修改您的代码以询问 IIS 以获得您网站的实际路径并修改它以将文件复制到那里。后者可能是更安全的方法。

当您在本地模拟器中运行时,一切都从您的主构建目录运行,因此行为有所不同。

于 2013-01-21T23:17:20.637 回答