2013-06-19 2 views
3

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

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

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

sample error

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

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

+0

Журналы Glimpse должны отображаться в файле 'glimpse.log' в корневой папке вашего сайта. Я еще не пробовал Glimpse с EPiServer 7.1, я попробую и посмотрю на это позже сегодня. – PhilPursglove

+0

Благодарим вас за отзыв. Да, я нашел файл glimpse.log новый, но он не дал никаких намеков - просто обычные сообщения «DEBUG» и «INFO». –

ответ

0

+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; 

И после возвращения нуль в вызывающий абонент NullReferenceExpcetion occours в:

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

Похоже патч от EPiServer должен ожидаться.

+0

Привет, Валдис! Спасибо за обновление - я просто понял точно то же самое и собирался обновить свой вопрос, когда увидел ваш ответ. Думаю, мы зависим от EPiServer, делающего изменения - было бы лучше сделать это на стороне Glimpse, так как это с открытым исходным кодом. Но я сомневаюсь, что есть простой способ обновить Glimpse, чтобы справиться с этим. –

5

Обходной (! Благодаря @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. Насколько я вижу, вы по-прежнему получаете самые полезные детали!

+0

Большое спасибо! Работает как шарм. –

+0

Только что понял, что плагин EpiServer CMS Find не работает правильно. Невозможно передать объект типа «Castle.Proxies.IViewProxy_1» для ввода «System.Web.Mvc.WebFormView». –

Смежные вопросы