EpiServer CMS 5 R2: поставщик нестандартных страниц отказывается загружаться - PullRequest
1 голос
/ 02 февраля 2009

Я недавно начал работу над новым проектом с использованием EpiServer, для которого я совершенно новичок. Одна из моих задач требует от меня написать собственный провайдер страниц.

У меня есть работающий и загруженный провайдер образцов страниц. Я также гарантировал, что у меня есть лицензия Enterprise Developer, поскольку функциональность доступна только с этой лицензией.

Итак, я выполнил каркасную реализацию моего провайдера страниц и ввел информацию в web.config на моем тестовом сайте точно так же, как пример XmlPageProvider:

    <pageProvider>
      <providers>
        <add entryPoint="26" capabilities="Create,Edit,Delete,Move,MultiLanguage" 
          name="custom" type="MyWebsite.CustomProvider,CustomPageProvider" />
  <!--  <add filePath="~/externalPages.xml" entryPoint="26" capabilities="Create,Edit"
          name="xml" type="CodeSamples.XmlPageProvider,XmlPageProvider" />-->
      </providers>
    </pageProvider>

Пока мы занимаемся этим, на что ссылается свойство entryPoint? Я не могу найти удовлетворительного объяснения этому нигде. Однако когда я попадаю на страницу, я вижу следующее.

Произошла ошибка 2.02.2009 10:07:26 IP-адрес пользователя fe80 :: d0e0: 16bf: c536: ad4d% 10 Пользовательский агент Mozilla / 4.0 (совместимый; MSIE 7.0; Windows NT 6.0; SLCC1; .СЕТЬ CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618) URL http://ioc -dev-uk5: 17003 / cms / admin / default.aspx Реферер (нет)

Сведения об исключении: TypeInitializationException: тип инициализатор для «EPiServer.DataFactory» бросил исключение.

Трассировка стека:

[TypeInitializationException: тип инициализатор для «EPiServer.DataFactory» бросил исключение.] в EPiServer.Web.InitializationModule.Initialize (EPiServerSection конфиг, настройки параметров, ConnectionStringSettingsCollection connectionStringSettings) в EPiServer.Web.InitializationModule.StaticInitialization () в EPiServer.Web.InitializationModule.Application_BeginRequest (Объект отправитель, EventArgs e) в System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () в System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, логическое и завершено синхронно)

[Внутреннее исключение ArgumentException: Невозможно создать экземпляр типа MyWebsite.CustomProvider, CustomPageProvider] в EPiServer.Core.PageProviderMap.AddPageProvider (ProviderSettings pageProviderSetting) в EPiServer.Core.PageProviderMap.LoadPageProviders (ProviderSettingsCollection pageProvidersCollection) в EPiServer.Core.PageProviderMap..ctor (ProviderSettingsCollection pageProviders) в EPiServer.DataFactory..cctor ()

Как видите, это довольно бесполезно. Я пытался получить другую лицензию, переустанавливать IIS, перезагружать коробку, пытаться выяснить, что происходит, используя отражатель для просмотра кода в EpiServer DataFactory, но все безрезультатно.

Я знаю, это что-то действительно простое, но что ?! Это слегка сводило меня с ума уже около 2 дней.

Plaese Halp!

1 Ответ

1 голос
/ 02 февраля 2009

Думаю, я отвечаю на это сам.

Это было действительно просто.

Пошел с отражателем и нашел это:

private void AddPageProvider(ProviderSettings pageProviderSetting)
{
    if (Type.GetType(pageProviderSetting.Type) == null)
    {
        throw new ArgumentException("Cannot create an instance of type " + pageProviderSetting.Type);
    }
    PageProviderBase pageProvider = this.CreatePageProviderInstance(pageProviderSetting);
    pageProvider.Initialize(pageProviderSetting.Name, pageProviderSetting.Parameters);
    if (this._pageProviders.ContainsKey(UrlSegment.ReplaceIllegalChars(pageProvider.Name)))
    {
        throw new ArgumentException(string.Format("There is already a page provider with name {0} registered", pageProvider.Name));
    }
    this.AddPageProvider(pageProvider, false);
}

Для имени типа требуется полное пространство имен, поэтому мой web.config теперь выглядит так:

<pageProvider>
  <providers>
    <add entryPoint="26" capabilities="Create,Edit,Delete,Move,MultiLanguage" 
      name="custom" type="MyWebsite.CustomProvider,MyWebsite.CustomProvider.CustomPageProvider" />
  </providers>
</pageProvider>

И мы все работаем ...

Еще один пример плохой передачи сообщений об ошибках. Должно быть сказано: «Не удалось найти тип», это избавило бы вас от многих неприятностей.

...