通过.NET Web服务访问Sitecore项目

时间:2010-07-30 17:28:34

标签: .net web-services sitecore

有没有人幸运使用.NET Web服务访问Sitecore项目?我的服务器上有许多仍在Coldfusion中的Web应用程序。我希望能够调用Web服务来下拉项目,但是当我尝试这样做时,我得到一个异常“Sitecore.Data.Items.Item无法序列化,因为它没有无参数构造函数。” / p>

3 个答案:

答案 0 :(得分:7)

查看Sitecore标准Web服务,您可以在解决方案的/ sitecore / shell / WebService文件夹下找到它。它提供了一些Sitecore项目和字段的基本操作,但它通常足以提取或保存数据。

希望这有帮助。

答案 1 :(得分:2)

我也在SDN forum上回答了这个问题。您可以创建自己的包装器对象,该对象填充Sitecore项并设置其成员。困难的部分是创建您的成员并从真正的Sitecore项目分配它们。如果你想要一切,那么我认为这将是困难的。如果你只是想要一些东西那么它可行。 E.g。

[Serializable]
public class SitecoreItem {
  public string ID;
  // more members

  SitecoreItem(Sitecore.Data.Items.Item scItem) {
      this.ID = scItem.ID;
      // assign more members from the true Sitecore item
  }

}

然后在您的WS方法中使用您的实际Sitecore项填充一个新实例并将其返回:

return new SitecoreItem(actualSCItem);

答案 2 :(得分:1)

如果序列化程序和反序列化程序都可以访问Sitecore数据库,那么您可以非常轻松地创建一个只包含ID,数据库名称,版本和语言的包装器。然后在另一端进行反序列化时,您可以使用该信息从数据库中重新获取相同的Sitecore项。

如果反序列化器根本没有访问数据库的权限,那么它实际上取决于您使用数据的需求。我通常遍历所有字段(请记住首先使用item.Fields.ReadAll()),并将它们存储在字典中以便于访问。对于序列化,我将其转换为List<T>键值对并忽略Dictionary成员(因为它无法序列化),然后在反序列化时重新填充它。我也在课堂上保留了其他一些属性,如ID,语言,版本,模板,路径等。

或者,如果你创建一个完整的模型类库,以便每个模板都映射到一个类(有些人),你可以(可能)直接序列化它们,因为它们(可能)不再绑定到Sitecore项目