Sitecore 8.2 PaaS (Azure) 保存 xml 所有实例可读
Sitecore 8.2 PaaS (Azure) save xml read-able by all instances
我们安装了 Sitecore 8.2 update4,运行 作为具有 4 个 CD(网络)实例的 PaaS。由于紧急情况,负责的 Sitecore 开发人员目前不在,因此我应该在本周末找到手头问题的解决方案,希望您能提供帮助。注意:我不是经过认证的 Sitecore 开发人员,而是经验丰富的 C# 开发人员。
问题:
有一个 API 通过 http 调用(在代码中),其中 returns 一个 XML 文档(非常小 - 其中只有 2 个节点)。已经注意到,对于浏览此特定页面的每个客户,这实际上是 done-/executed。当然,这非常糟糕,而且还会减慢页面速度 (TTFB)。所以我实际上通过 Sitecore 中的计划任务将轮询移到了后端 API ,它已经很完美了。
然而,由于我的无知(我基本上对针对 Sitecore 进行开发一无所知),我想将返回的 xml 文档从 API 存储到本地文件系统。当我想在多实例环境中再次读取 XML 时,这当然不起作用。
所以总而言之,我寻找一种方法来存储、读取和更新此 xml 文档,以便它可以被所有 4 个(或更多)实例读取。
我找到了以下示例:Adding a file to the Sitecore Media Library programatically
但是我当然不确定将它存储在 MediaLibrary 中是否有意义。通过阅读 SiteCore 的一些较旧的 "Content API Cookbook"(记住我无法访问 SiteCore 的开发网络),"Sitecore.Data.Fields.FileField" 似乎也是一个解决方案。但是,我不希望该字段对 ContentEditor 可见,以免他们对其进行修改。
请理解我没有太多时间来学习有关 SiteCore 的所有内容,这实际上不是我的工作,但我提供了帮助。因此,一个带有小示例的简单解决方案(因为我无法在网上找到合适的示例)将非常有帮助并受到高度赞赏!
提前致谢!
为了避免必须学习 Sitecore 并在无需大量返工初始实现的情况下仍然提高页面性能,您可以查看响应的应用程序内存缓存。这也避免了必须跨实例管理文件。
通过使用应用程序缓存,您可以确保该实例仅在第一次请求时进行调用,然后您可以在一段时间后释放缓存以允许再次调用。
通常,您随后会调用一个方法来检查缓存是否为空,如果缓存为空,它会用您 API 中的值填充它。根据您想要轮询的频率设置到期时间。
public void AddItemToCache(Object sender, EventArgs e) {
if (Cache["MyKey"] == null)
Cache.Add("MyKey", "SomeXml", null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);
}
请参阅 MSDN 上的文档:https://docs.microsoft.com/en-us/dotnet/api/system.web.caching.cache.add?view=netframework-4.7.2
我们安装了 Sitecore 8.2 update4,运行 作为具有 4 个 CD(网络)实例的 PaaS。由于紧急情况,负责的 Sitecore 开发人员目前不在,因此我应该在本周末找到手头问题的解决方案,希望您能提供帮助。注意:我不是经过认证的 Sitecore 开发人员,而是经验丰富的 C# 开发人员。
问题: 有一个 API 通过 http 调用(在代码中),其中 returns 一个 XML 文档(非常小 - 其中只有 2 个节点)。已经注意到,对于浏览此特定页面的每个客户,这实际上是 done-/executed。当然,这非常糟糕,而且还会减慢页面速度 (TTFB)。所以我实际上通过 Sitecore 中的计划任务将轮询移到了后端 API ,它已经很完美了。 然而,由于我的无知(我基本上对针对 Sitecore 进行开发一无所知),我想将返回的 xml 文档从 API 存储到本地文件系统。当我想在多实例环境中再次读取 XML 时,这当然不起作用。
所以总而言之,我寻找一种方法来存储、读取和更新此 xml 文档,以便它可以被所有 4 个(或更多)实例读取。
我找到了以下示例:Adding a file to the Sitecore Media Library programatically
但是我当然不确定将它存储在 MediaLibrary 中是否有意义。通过阅读 SiteCore 的一些较旧的 "Content API Cookbook"(记住我无法访问 SiteCore 的开发网络),"Sitecore.Data.Fields.FileField" 似乎也是一个解决方案。但是,我不希望该字段对 ContentEditor 可见,以免他们对其进行修改。
请理解我没有太多时间来学习有关 SiteCore 的所有内容,这实际上不是我的工作,但我提供了帮助。因此,一个带有小示例的简单解决方案(因为我无法在网上找到合适的示例)将非常有帮助并受到高度赞赏!
提前致谢!
为了避免必须学习 Sitecore 并在无需大量返工初始实现的情况下仍然提高页面性能,您可以查看响应的应用程序内存缓存。这也避免了必须跨实例管理文件。
通过使用应用程序缓存,您可以确保该实例仅在第一次请求时进行调用,然后您可以在一段时间后释放缓存以允许再次调用。
通常,您随后会调用一个方法来检查缓存是否为空,如果缓存为空,它会用您 API 中的值填充它。根据您想要轮询的频率设置到期时间。
public void AddItemToCache(Object sender, EventArgs e) {
if (Cache["MyKey"] == null)
Cache.Add("MyKey", "SomeXml", null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);
}
请参阅 MSDN 上的文档:https://docs.microsoft.com/en-us/dotnet/api/system.web.caching.cache.add?view=netframework-4.7.2