Search code examples
sitecoresitecore8

Sitecore Experience Analytics Graphs Issue


After upgrading my site from 7.1 to 8.1 I have the following error message appears when opneing any page in the expierence analytics:

"The 'Graph Name' graph cannot be displayed due to a server error. Contact you system administrator."

The following call show 500 error on the browser console:

"http://sitename/sitecore/api/ao/aggregates/all/DC0DB760B0F54690B9EB1BBF7A4F7BD1/all?&dateGrouping=collapsed&&keyTop=8&keyOrderBy=valuePerVisit-Desc&dateFrom=07-04-2016&dateTo=05-07-2016&keyGrouping=by-key"

I checked the log files and there is no server error logged there!

More information:

The error message: "ValueFactory attempted to access the Value property of this instance."

Also

     "   at System.Lazy`1.CreateValue()   at System.Lazy`1.LazyInitValue()   at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.GetControllerMapping()   at System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection collector, HttpConfiguration configuration, IInlineConstraintResolver constraintResolver, IDirectRouteProvider directRouteProvider)   at System.Web.Http.Routing.AttributeRoutingMapper.<>c__DisplayClass2.<>c__DisplayClass4.<MapAttributeRoutes>b__1()   at System.Web.Http.Routing.RouteCollectionRoute.EnsureInitialized(Func`1 initializer)   at System.Web.Http.Routing.AttributeRoutingMapper.<>c__DisplayClass2.<MapAttributeRoutes>b__0(HttpConfiguration config)   at System.Web.Http.HttpConfiguration.ApplyControllerSettings(HttpControllerSettings settings, HttpConfiguration configuration)   at System.Web.Http.Controllers.HttpControllerDescriptor.InvokeAttributesOnControllerType(HttpControllerDescriptor controllerDescriptor, Type type)   at System.Web.Http.Controllers.HttpControllerDescriptor..ctor(HttpConfiguration configuration, String controllerName, Type controllerType)   at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.InitializeControllerInfoCache()   at System.Lazy`1.CreateValue()   at System.Lazy`1.LazyInitValue()   at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.GetControllerMapping()   at System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection collector, HttpConfiguration configuration, IInlineConstraintResolver constraintResolver, IDirectRouteProvider directRouteProvider)

at System.Web.Http.Routing.AttributeRoutingMapper.<>c__DisplayClass2.<>c__DisplayClass4.<MapAttributeRoutes>b__1()   at System.Web.Http.Routing.RouteCollectionRoute.EnsureInitialized(Func`1 initializer)   at System.Web.Http.Routing.AttributeRoutingMapper.<>c__DisplayClass2.<MapAttributeRoutes>b__0(HttpConfiguration config)   at 

System.Web.Http.HttpConfiguration.ApplyControllerSettings(HttpControllerSettings settings, HttpConfiguration configuration)   at 

System.Web.Http.Controllers.HttpControllerDescriptor.InvokeAttributesOnControllerType(HttpControllerDescriptor controllerDescriptor, Type type)   at 

System.Web.Http.Controllers.HttpControllerDescriptor..ctor(HttpConfiguration configuration, String controllerName, Type controllerType)   at 

Sitecore.Services.Infrastructure.Web.Http.Dispatcher.NamespaceHttpControllerSelector.InitializeControllerDictionary()   at System.Lazy`1.CreateValue()--- End of stack trace from previous location where exception was thrown ---   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()   at System.Lazy`1.get_Value()   at Sitecore.Services.Infrastructure.Web.Http.Dispatcher.NamespaceHttpControllerSelector.FindMatchingController(String namespaceName, String controllerName)   at Sitecore.Services.Infrastructure.Web.Http.Dispatcher.NamespaceHttpControllerSelector.SelectController(HttpRequestMessage request)   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"

Any ideas?


Solution

  • Sitecore support provided the cause and solution for this and thought will add it in case same issue happened with someone else:

    Cause:

    It looks like the issue is caused by a conflict in a Web API configuration

    As far as I can see, the following code is executed during the application start:

    void Application_Start(object sender, EventArgs e)
    {
    // Code that runs on application startup
        System.Web.Http.GlobalConfiguration.Configure(MyDll.WebApiConfig.Register);
    }
    

    Solution:

    As an alternative approach, this code can be moved to the "initialize" pipeline to run on application startup.

    In case if custom code is run after the default Sitecore.ExperienceAnalytics.Api.Pipelines.Initialize.WebApiInitializer processor, the Experience Analytics configuration will be loaded first.

    For example: 1) Create the "initialize" pipeline processor

    internal class WebApiInitializer
    {
        public void Process(PipelineArgs args)
        {
            System.Web.Http.GlobalConfiguration.Configure(Register);
        }
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();
        }
    }
    

    2) Create a config file and place in into the Include/Z.MapRoutes fodler (so it will be loaded last):

    <configuration xmlns:x="http://www.sitecore.net/xmlconfig/">
      <sitecore>
        <pipelines>
          <initialize>
            <processor type="HttpAttributeRouting.WebApiInitializer, HttpAttributeRouting" x:after="processor[position()=last()]" />
          </initialize>
        </pipelines>
      </sitecore>
    </configuration>