Невозможно использовать 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 имеет классный новый редактор), это не вызовет проблем с зависимостями и требует перекомпиляции. Их веб-сервисы обратно совместимы.
Нет кода... но надеюсь, что это поможет, дайте мне знать, если я могу уточнить.