如何以编程方式访问Sitecore中的内容交付服务器上的主数据库?

时间:2016-10-16 14:18:56

标签: sitecore sitecore8

如何以编程方式访问内容传送服务器上的Sitecore“master”数据库?使用代码直接访问master数据库的地方。

  Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");

不可能。

3 个答案:

答案 0 :(得分:3)

你做不到。而且,你甚至不应该尝试。此服务器称为Content Delivery服务器,因为它的唯一目的是提供内容。 Sitecore master数据库存储未发布但尚未交付给最终用户的内容。

我猜测(但这只是猜测),您希望将一些用户生成的内容存储在master数据库中,然后可能会在某个时候将其发布给最终用户。如果这就是您所需要的,您应该查看有关Sitecore User Generated Content的所有文章。

我在您的其他问题中看到您正在使用Sitecore Web APImaster数据库中创建项目。您还可以考虑Publishing items using Sitecore Web API

答案 1 :(得分:2)

几个月前,我们遇到了类似的问题。我们的任务是保存UGC,以及案例评论。

我们针对此问题的解决方案是使用Sitecore自定义事件。 基本上我们收集用户生成的数据,创建专用模型并排队事件

CommentsRemoteSavingEvent eventmodel = new CommentsRemoteSavingEvent(commentModel); 

EventManager.QueueEvent(eventModel, true, false);

第一个参数确定事件是否全局排队,第二个参数确定它是否在本地排队。事件模型是一个自定义类,用于存储所有必需信息。

在CM系统上,我们现在只需要创建一个钩子,它可以订阅这些自定义事件

public class CommentsRemoteSavingEventHook : IHook
{
    public void Initialize()
    {
        EventManager.Subscribe(new Action<CommentsRemoteSavingEvent>(CommentsRemoteSavingHandler.Run));
    }
}

这行代码订阅了CommentsRemoteSavingEvent,它是在CM系统上触发的事件类型,并允许在事件出列时运行特定的Handler。

Hook本身可以通过简单的配置

添加到钩子中
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <hooks>
      <hook type="YOURNAMESPACE.CommentsRemoteSavingEventHook, YOURDLL" />
    </hooks>
  </sitecore>
</configuration>`enter code here`

Handler本身可以像这样实现

    public class CommentsRemoteSavingHandler
{
    /// <summary>  
    /// This method is used handle the dequeued event  
    /// </summary>  
    /// <param name="e">The event</param>  
    public static void Run(CommentsRemoteSavingEvent e)
    {
        EventManager.RemoveQueuedEvents(new EventQueueQuery() { EventType = typeof(CommentsRemoteSavingEvent) });
          //// Use the CommentsRemoteSavingEvent which holds now all data
    }

第一行代码会从事件队列中安全地删除事件,因此它不会再次出列。

在作为参数提供给你的CommentsRemoteSavingEvent中,现在是你在CD端放入的所有信息,但现在在CM端。

因此,基于这些信息,您可以简单地创建项目并根据需要发布它们,因为您现在直接在CM系统上,就像我们使用用户生成的注释一样。

我希望这可以帮助您解决将数据从CD传输到CM并在CM系统上处理它们的问题。

答案 2 :(得分:0)

之前我有同样的情况,实际上我没有使用Sitecore Item Web API,因为我只想要三个函数来执行任务,所以我创建了自己的控制器,我在那里添加了与master数据库对话的方法,我从CM环境中暴露了它们,从我使用CM URL访问它们的CD服务器:

example : http://cmsitecore/yourcontroller/yourmethod