Невозможно использовать Ektron Framework API из библиотеки классов

С помощью Ektron v8.02Я создал простую библиотеку классов, которая использует Ektron.Cms.Framework.Core.Content Пространство имен.

Я добавил консольное приложение в решение, чтобы помочь с тестированием; в консольном приложении я добавил ссылку на проект в исходную библиотеку классов и App.Config файл с соответствующим Ektron.DbConnection Строка подключения, указывающая на нашу базу данных dev Ektron.

Вкратце, вот код, о котором идет речь:

Консольное приложение для тестирования

static void Main(string[] args) {
    MyClass instance = new MyClass();
}

Библиотека классов

public class MyClass {
    private Ektron.Cms.Framework.Core.Content.Content cAPI;

    public MyClass() {
        //** exception here **
        cAPI = new Ektron.Cms.Framework.Core.Content.Content();
    }
}

Исключение брошено в MyClass конструктор, когда я пытаюсь создать новый экземпляр Content API. Исключение составляет IncompatibleTypesException который говорит:

При разрешении зависимостей для Ektron.Cms.IRequestInfoProvider предоставленный тип не совместим с Ektron.Cms.IRequestInfoProvider.

На форумах Ektron Dev есть несколько тем здесь и здесь, в которых упоминается именно эта проблема, но решения пока не опубликованы. Надеясь, что кто-то с опытом использования Framework API из библиотеки классов распознает эту ситуацию и предложит несколько советов, прежде чем мне придется обращаться в службу поддержки Ektron.

3 ответа

Решение

Это не было доступно в версии 8.02, но более новые версии (я думаю, v8.6+) имеют альтернативный "3-уровневый" набор библиотек DLL. Эти "трехуровневые" библиотеки используют WCF для связи с рабочей областью / базой данных, поэтому они не зависят от таких веб-ресурсов, как HttpContext. Вы можете найти файлы в каталоге установки; путь будет примерно таким: C:\Program Files (x86)\Ektron\CMS400v86\startersites\3TierMin\Content

Я с большим успехом использовал эти библиотеки при написании консольных приложений для таких вещей, как импорт или изменение контента. Есть несколько дополнительных конфигурационных файлов, которые вы должны взять с собой, и я думаю, что вам нужен AppSetting, который указывает на URL вашего "среднего уровня" - сайта Ektron, на котором есть ваша рабочая область.

Это не так сложно. Я создал класс, похожий на тот, о котором вы говорите. Моей целью было на самом деле использовать эту библиотеку классов для импорта содержимого, которое у меня есть, из собственной CMS.

Но вместо того, чтобы использовать Ektron.Cms.Framework.Core.Content.Content() Я использовал Ektron.Cms.API.Content.Content(),

Может быть, вы можете попробовать.

Я думаю, вы собираетесь посвятить много времени написанию кода и кошмарам ссылок /gac, пытаясь ссылаться на веб-библиотеки из консольного приложения. Я уверен, что это может быть сделано, и у меня был ограниченный успех с этим сам. Но когда я пытаюсь вызвать Ektron API из консольного приложения, я настоятельно рекомендую создать некоторые веб-сервисы, размещенные в вашем приложении ektron, которые будут выполнять тяжелую работу с API, а затем заставить консольное приложение вызывать веб-сервисы. Делая это, вы можете начинать потоки запросов и выполнять все виды процессов автоматизации.

Кроме того, когда вы обновляете (8.6 имеет классный новый редактор), это не вызовет проблем с зависимостями и требует перекомпиляции. Их веб-сервисы обратно совместимы.

Нет кода... но надеюсь, что это поможет, дайте мне знать, если я могу уточнить.

Другие вопросы по тегам