Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 919
Mohammed Syam Avatar asked Oct 30 '22 00:10

Mohammed Syam


2 Answers

The cause of this error is you might be using Web Api in your code. To integrate web api with site core you need to extend your global.asax as below

 public class GlobalExtended : Sitecore.Web.Application
{
   protected void Application_Start(object sender, EventArgs e)
   {
    GlobalConfiguration.Configure(ConfigureRoutes);
    }

  public static void ConfigureRoutes(HttpConfiguration config)
  {
   config.Routes.MapHttpRoute("DefaultApiRoute",
    "api/{controller}/{action}/{id}",
     new { id = RouteParameter.Optional });

    GlobalConfiguration.Configuration.MapHttpAttributeRoutes();
    GlobalConfiguration.Configuration.Formatters.Clear();
    GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
   }
}

You can go through below url for detailed explanation https://sitecorecommerce.wordpress.com/2014/11/30/webapi-attribute-routing-is-not-working-with-sitecore-7-5/ http://blog.krusen.dk/web-api-attribute-routing-in-sitecore-7-5-and-later/

like image 161
Mohit Dharmadhikari Avatar answered Jan 04 '23 15:01

Mohit Dharmadhikari


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>
like image 38
Mohammed Syam Avatar answered Jan 04 '23 15:01

Mohammed Syam