动态更新Azure webrole中的sitemap.xml

时间:2013-10-17 07:34:33

标签: azure sitemap azure-web-roles

我正在将现有网站移至Azure。在azure webrole我有 1.默认端口的网站和
2.在另一个港口的服务可以说:8000

现在我的网站创建了一些动态页面,并且要求使用新URL更新sitemap.xml。在开发阶段,我可以从服务创建和更新sitemap.xml文件。但这在登台服务器上是不可能的。

我无法理解为什么会这样。可以告诉我一个解决方案,我可以在服务的网站根文件夹中创建一个sitemap.xml文件吗?

1 个答案:

答案 0 :(得分:1)

我会说你有比sitemap.xml本身更大的问题!

在Azure WebRole中工作时,您拥有非持久性存储。这是我们为云的可扩展性/弹性/弹性付出的代价。这意味着如果代码运行的硬件(裸机)出现问题,Azure将在新的金属片上实例化一个新的,并将部署原始包。此时,所有动态生成的页面都将丢失,因为它们不是原始包的一部分。

对于您的网站从用户上传/等生成/接受的所有内容,您必须使用Azure Blob storage来保留。在blob存储中获得动态内容后,您可以选择将其交付给最终用户:

  • ASP.NET Handler(ashx)将读取blob内容并将其重新流式传输(发送)给最终用户(我不会这样做);
  • 动态生成指向blob存储中内容的相应链接。如果内容必须受到保护且不可供所有人使用,则使用Shared Access Signature;
  • 使用custom VirtualPath provider制作远程内容(Azure Blob)对于最终用户来说就像本地一样。

现在您可能已经猜到了 - 让Sitemap.xml始终保持最新的最佳方法是再次使用ASP.NET Handler来动态生成其内容。当然使用某种缓存(甚至可能是blob)以避免在每次请求Sitemap.xml时都出现昂贵的调用和对象图。