【问题标题】:Umbraco Creating Content Through Code Causes Cache InvalidationUmbraco 通过代码创建内容导致缓存失效
【发布时间】:2015-04-08 14:50:37
【问题描述】:

我们创建了一个区域,客户可以在其中管理他们在站点中的内容,而不是管理员,并且由于某种原因,当我们创建新内容时,缓存似乎会失效。

创建内容后,如果您转到管理中的节点,您将在链接到文档属性附近看到此错误:糟糕:此文档已发布但不在缓存中(内部错误)。

任何想法为什么会发生这种情况?有没有办法在创建后检查项目是否在缓存中?

这似乎是导致问题的方法:

public static int GetOrCreateContentFolder(IContentService contentService, int userId, int parentId, string folderName, string contentTypeAlias)
    {
        var targetContentFolder = 
            contentService.GetChildren(parentId)
            .Where(c => c.Name.ToLower() == folderName.ToLower())
            .ToList();

        if (targetContentFolder.Any())
        {
            return targetContentFolder[0].Id;
        }

        var contentFolder = contentService.CreateContent(folderName, parentId, contentTypeAlias, userId);
        return contentFolder.Id;
    }

【问题讨论】:

  • 您在负载均衡环境中吗?它是什么版本的 umbraco?
  • 它不是负载均衡的,我们在亚马逊的单个虚拟机上托管,版本是 7.1.4
  • 通常当多个开发人员共享同一个 umbraco db 时会发生这种情况。你能显示一些代码吗?你在使用 ContentService api 吗?
  • 好的,刚刚发布了导致问题的代码,我们目前正在使用内容服务api。
  • 你试过 YOURDOMAIN/Umbraco/dialogs/republish.aspx

标签: c# content-management-system umbraco


【解决方案1】:

您似乎需要发布名为“contentFolder”的新节点。

var contentFolder = contentService.CreateContent(folderName, parentId, contentTypeAlias, userId);
contentService.SaveAndPublish(contentFolder);

如果您还需要发布所有子项,请使用 PublishWithChildren

在此处查看 ContentService 中的所有方法:https://our.umbraco.org/documentation/Reference/Management-v6/Services/ContentService

【讨论】:

  • 好的,我已经更新了代码,在这里感谢您的帮助。
  • 我确实有一个问题,为什么该错误会出现在文档属性附近的管理员中:糟糕:​​此文档已发布但不在缓存中(内部错误)
  • 很酷,它工作了 :) Umbraco 将缓存版本存储在磁盘上的 App_data 文件夹中。当一个节点在数据库中设置为“已发布”,但umbraco在缓存中找不到它..出现此错误
  • 但是为什么它不在缓存中呢?如果它被创建但未发布,是否应该放入缓存中?
  • 使用 CreateContent() 创建新节点时,应使用 contentService.Save(contentFolder) 或 contentService.SaveAndPublish(contentFolder) 保存该节点,以便同时保存和发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2018-03-13
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
相关资源
最近更新 更多