我们已经安装了Sitecore 8.2 update4,并以PaaS的形式运行并带有4个CD(网络)实例。由于紧急情况,目前没有负责任的Sitecore开发人员,因此,我应该在本周末找到针对该问题的解决方案,希望您能为您提供帮助。注意:我不是经过认证的Sitecore开发人员,而是经验丰富的C#开发人员。
问题: 有一个通过http调用(以代码形式)的API,该API返回一个XML文档(非常小-仅2个节点)。已经注意到,实际上是为每个浏览该特定页面的客户完成/执行的。当然,这是非常糟糕的事情,而且还会降低页面速度(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的所有知识,实际上这不是我的工作,但我提供了帮助。因此,仅提供一个小示例的简单解决方案(因为我在网上找不到合适的示例)将非常有用,并受到高度赞赏!
提前谢谢!
答案 0 :(得分:0)
为避免不必学习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