Glimpse генерирует исключение NullReferenceException с EPiServer 7.1 MVC 4

У меня есть приложение MVC 4, созданное поверх EPiServer 7.1. EPiServer использует StructureMap в качестве инфраструктуры IoC, что может быть связано с моими проблемами. Во всяком случае, это то, что я сделал:

  1. Через «Управление пакетами Nuget...» в мой проект добавлен «Glimpse Mvc4».
  2. Проверено, что web.config был обновлен, как и ожидалось.
  3. Перезапустил мое приложение

После добавления Glimpse все запросы завершаются с ошибкой NullReferenceException, например, так:

образец ошибки

Я попытался включить ведение журнала Glimpse, прокомментировав «уровень ведения журнала = «Trace»» в разделе Glimpse файла web.config, но не могу найти никаких журналов ни в журналах событий Windows, ни в файлах журнала log4net.

Идеи по дальнейшему устранению неполадок или подсказки по решению?


person Thomas Svensen    schedule 19.06.2013    source источник
comment
Журналы Glimpse должны отображаться в файле glimpse.log в корневой папке вашего сайта. Я еще не пробовал Glimpse с EPiServer 7.1, сегодня попробую посмотреть.   -  person PhilPursglove    schedule 19.06.2013
comment
Спасибо за ваш отзыв! Да, я нашел файл glimpse.log новым, но он не дал никаких подсказок - только обычные сообщения DEBUG и INFO.   -  person Thomas Svensen    schedule 20.06.2013


Ответы (2)


Обходной путь (спасибо @avanderhoorn!) — добавить это в раздел «проблеск» web.config:

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
      <tabs>
        <ignoredTypes>
          <add type="Glimpse.AspNet.Tab.Routes, Glimpse.AspNet"/>
        </ignoredTypes>
      </tabs>
    <inspectors>
        <ignoredTypes>
            <add type="Glimpse.AspNet.Inspector.RoutesInspector, Glimpse.AspNet"/>
            <add type="Glimpse.Mvc.Inspector.ModelBinderInspector, Glimpse.Mvc4"/>
        </ignoredTypes>
    </inspectors>
</glimpse>

Это отключает две части Glimpse, которые не работают с EPiServer. Насколько я вижу, вы по-прежнему получаете самые полезные детали!

person Thomas Svensen    schedule 26.06.2013
comment
Только что понял, что плагин EpiServer CMS Find тоже работает некорректно. Невозможно привести объект типа «Castle.Proxies.IViewProxy_1» к типу «System.Web.Mvc.WebFormView». - person wałdis iljuczonok; 03.07.2013

+1 то же самое здесь. Что я обнаружил до сих пор, так это то, что добавление Glimpse дополняет все маршруты и заменяет их собственными прокси-классами для перехвата вызовов маршрутизации. Похоже, что EPiServer (и UrlResolver в частности) не любит этот случай. Основной причиной этого исключения является следующий метод:

UrlResolver.GetVirtualPath(ContentReference contentLink, string language, RouteValueDictionary routeValues, RequestContext requestContext)

Что ему не нравится, так это то, что в таблице маршрутизации нет маршрута типа ContentRoute:

foreach (RouteBase base2 in from r in this._routes
where (bool) (r is ContentRoute)
select r)
{
   ...
   if(...)
   {
       return virtualPath;
   }
}

return null;

И после возврата null вызывающей стороне NullReferenceExpcetion возникает в:

UrlExtensions.MapUrlFromRoute(RequestContext requestContext, RouteCollection routeCollection, string url)

Похоже, следует ждать патча от EPiServer.

person wałdis iljuczonok    schedule 25.06.2013
comment
Привет Валдис! Спасибо за обновление - я только что понял то же самое и собирался обновить свой вопрос, когда увидел ваш ответ. Я полагаю, что мы зависим от того, внесет ли EPiServer изменения - было бы лучше сделать это на стороне Glimpse, так как это с открытым исходным кодом. Но я сомневаюсь, что есть простой способ обновить Glimpse, чтобы справиться с этим. - person Thomas Svensen; 25.06.2013