8

我是 Sitecore 开发的新手,所以如果这个问题是基本的,我很抱歉。我已经创建了一个代理(计划任务)和一个 WCF 服务,并将它们都添加到我的 SiteCore 项目中。代理调用 WCF 服务代码调用的相同代码。

我遇到的问题是,当我Database.Template[ID template]为要处理的项目调用传入相应模板的 ID 容器时,它可以在代理任务内部工作,但不能在 WCF 服务内部工作。

Database.Template[ID id]对 WCF 服务内部的任何调用都会给我一个NullReferenceException,但是代理内部完全相同的调用会正确收集模板。

这是由于某些结构原因导致调用应用程序是网页而不是 Web 服务吗?

编辑#1:我将 svc 作为允许的扩展名,并且我都尝试过

Sitecore.Configuration.Factory.GetDatabase("master") 

var siteContext = Sitecore.Configuration.Factory.GetSite("websiteMaster");
siteContext.Database.Template[]; 

两者都返回NullReferenceException

我也可以使用 成功获得一个项目,GetItem但是当我尝试访问该项目的模板属性时,我得到一个NullReferenceException.

4

4 回答 4

9

您的 WCF 服务没有 Sitecore 上下文,因此Sitecore.Context.Database为空。

您可以添加svc到允许的扩展列表或通过以下方式获取数据Sitecore.Configuration.Factory.GetDatabase("master")

于 2013-04-01T12:28:07.077 回答
2

这个问题有几个部分

  • 使用 Sitecore 数据库以编程方式访问项目
  • Sitecore 安全
  • WCF 和 Sitecore HTTPContext

使用 Sitecore 数据库以编程方式访问项目

  • 创建用于读取/编辑 Sitecore 项目的 WCF 服务需要访问 Sitecore 数据库,请参阅以编程方式登录到 Sitecore
  • (如前所述),Sitecore.Configuration.Factory.GetDatabase(Database)显式使用将为您提供数据库,但这会带来第 2 个问题。
  • 为了利用内置的 Sitecore 功能,使用Sitecore.Context.ContentDatabaseSitecore.Context.Database方法根据发出请求的上下文返回正确的数据库更加灵活;CD、CM服务器等

安全

  • 虽然安全禁用程序可以消除访问 Sitecore 数据库的所有安全问题,但不建议这样做。 Alex Soft 和 Sitecore 安全

    using (new SC.Security.Accounts.UserSwitcher(User.FromName(ServiceAccountName, true)))
    {
        // code here
    }
    

更恰当地与Sitecore 的安全 API保持一致,提供交易的安全跟踪,​​并支持对服务完成的更改项目进行版本控制。这些信息将有助于错误跟踪和审计。

WCF 和 Sitecore HTTPContext:

  • 在使用 WCF 和使用 Sitecore HTTPContext 的对象时,您可能会遇到问题。
  • 如果您想在 WCF 服务中使用Sitecore.Context.ContentDatabase或使用Sitecore.Context.Database,您可能会从数据库中获得空异常,尤其是在 CD 实例上运行该服务时。
  • 克服此限制的唯一方法是Sitecore.Context.SetActiveSite(SiteName)在服务中的某个点(通常是构造函数)使用 设置活动站点。
  • SiteName 是 web.config 的 Sitecore/Sites 部分中可用的站点列表的名称。
于 2013-08-28T20:55:34.333 回答
0

这不是一个理想的解决方案,但我几乎将这条线从 WCF 服务转换为基于 ASMX 的服务,并且一切正常。我遇到的唯一问题是在调用服务时遇到访问权限问题。

我将 ASMX 服务函数内容包装在这种类型的块中:

using (new Sitecore.SecurityModel.SecurityDisabler()) { }

一切都神奇地开始工作。我开始怀疑这是否不是我遇到的 Sitecore 框架的错误。如果有人知道如何提交正式报告,请告诉我。

于 2013-04-01T18:16:15.367 回答
0

还值得检查 Website\App_Config\Include\SwitchMasterToWeb.config 并在需要时重命名/删除,因为它会使主数据库在其他情况下显示为 web。由于它是一个补丁配置,在故障排除时很容易错过它。

于 2016-02-10T14:08:36.220 回答