我正在尝试将静态.html网页用于遇到大量流量高峰的网站。该网站是MVC3
个应用。静态.html页面的目录结构类似于以下内容:
approot
|---content
index.html
|---staticpages
page1.html
page2.html
page3.html
我已将web.config
中的defaultDocument设置为"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页面进行更改,我们就会被迫重新部署?
答案 0 :(得分:1)
当您部署webrole以在Azure上运行时,它实际上打包了Web角色的两个副本。一个最终在AppRoot下,一个最终在SitesRoot下。
您的WebRole.OnStart进程在AppRoot中运行,但您的网站实际上是从SitesRoot中的副本提供的。因此,问题在于您的代码正在快速运行并从blob存储中复制文件,但它们将在AppRoot下运行,因此对您的站点不可见。
您需要在global.asax中启动一个线程来进行复制或修改您的代码,以便查询IIS以获取您网站的实际路径并修改它以将文件复制到那里。后者可能是更安全的方法。
当您在本地模拟器中运行时,所有内容都从主构建目录运行,因此行为不同。