【问题标题】:Sitecore 8.2 PaaS (Azure) save xml read-able by all instancesSitecore 8.2 PaaS (Azure) 保存所有实例可读的 xml
【发布时间】:2018-10-20 17:52:51
【问题描述】:

我们有一个 Sitecore 8.2 update4 安装并作为具有 4 个 CD(Web)实例的 PaaS 运行。由于紧急情况,负责的 Sitecore 开发人员目前不可用,因此我应该在本周末为手头的问题找到解决方案,希望您能提供帮助。注意:我不是经过认证的 Sitecore 开发人员,而是一位经验丰富的 C# 开发人员。

问题: 有一个通过 http 调用(在代码中)的 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 的所有内容,而且这实际上不是我的工作,但我提供了帮助。因此,一个带有小示例的简单解决方案(因为我在网上找不到合适的示例)将非常有帮助并受到高度赞赏!

提前谢谢你!

【问题讨论】:

    标签: sitecore


    【解决方案1】:

    为避免必须学习 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

    【讨论】:

    • 感谢 Jay S 的回复。由于时间压力很大,我最终还是在周末学习了如何为 Sitecore 编写代码。我的假设已经正确,MediaLibrary 是管理手头问题的好地方。但是,您的解决方案也很有趣,并且可能也会起作用。因此,再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    相关资源
    最近更新 更多