Доступ к элементам Sitecore через веб-сервис .NET - PullRequest
6 голосов
/ 30 июля 2010

Кому-нибудь повезло с использованием веб-службы .NET для доступа к элементам Sitecore? У меня есть несколько веб-приложений на моем сервере, которые все еще находятся в Coldfusion. Я хотел бы иметь возможность вызывать веб-сервис для вывода элементов, но когда я попытался это сделать, я получил исключение: «Sitecore.Data.Items.Item не может быть сериализован, поскольку у него нет конструктора без параметров». 1001 *

Ответы [ 3 ]

7 голосов
/ 01 августа 2010

Взгляните на стандартный веб-сервис Sitecore, вы можете найти его в папке / sitecore / shell / WebService вашего решения. Он предлагает некоторые основные операции с элементами и полями Sitecore, но его часто достаточно для извлечения или сохранения данных.

Надеюсь, это поможет.

2 голосов
/ 05 августа 2010

Я также ответил на форуме SDN . Вы можете создать свой собственный объект-обертку, который заполнен элементом Sitecore и устанавливает его членов. Трудной частью будет создание ваших участников и назначение их из реального элемента Sitecore. Если ты хочешь все, то я думаю, что это будет трудно. Если вы просто хотите что-то, то это выполнимо. Э.Г.

[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);
1 голос
/ 05 августа 2010

Если и сериализатор, и десериализатор имеют доступ к базе данных Sitecore, то вы можете очень легко создать оболочку, которая просто сериализует идентификатор, имя базы данных, версию и язык. Затем, после десериализации на другом конце, вы можете повторно извлечь тот же элемент Sitecore из базы данных, используя эту информацию.

Если десериализатор вообще не имеет доступа к базе данных, то это действительно зависит от ваших потребностей в использовании данных. Обычно я перебираю все поля (не забывайте сначала использовать item.Fields.ReadAll()) и сохраняю их в словаре для быстрого доступа. Для сериализации я преобразую это в List<T> пар ключ-значение и игнорирую элемент Dictionary (поскольку он не может быть сериализован), а затем повторно заполняю его при десериализации. Я также оставил в классе несколько других свойств, таких как ID, Язык, Версия, Шаблон, Путь и т. Д.

В качестве альтернативы, если вы создаете целую библиотеку классов моделей, чтобы каждый шаблон отображался в классе (что делают некоторые люди), вы можете (вероятно) сериализовать их сразу, поскольку они (вероятно) больше не связаны с Sitecore пункт.

...