Sitecore 体验分析图表问题

Sitecore Experience Analytics Graphs Issue

将我的网站从 7.1 升级到 8.1 后,在体验分析中打开任何页面时出现以下错误消息:

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

以下调用在浏览器控制台上显示 500 错误:

"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"

我检查了日志文件,那里没有记录服务器错误!

更多信息:

错误信息: "ValueFactory attempted to access the Value property of this instance."

还有

     "   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()"

有什么想法吗?

此错误的原因是您可能在代码中使用了 Web Api。要将网站 api 与站点核心集成,您需要按如下方式扩展 global.asax

 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());
   }
}

你可以通过下面的url进行详细的解释 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/

Sitecore 支持为此提供了原因和解决方案,并认为会添加它以防其他人发生同样的问题:

原因:

看起来问题是由 Web API 配置中的冲突引起的

据我所知,在应用程序启动期间执行了以下代码:

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

解法:

作为替代方法,可以在应用程序启动时将此代码移动到 "initialize" 管道到 运行。

如果自定义代码在默认 Sitecore.ExperienceAnalytics.Api.Pipelines.Initialize.WebApiInitializer 处理器之后 运行,则将首先加载体验分析配置。

例如: 1) 创建 "initialize" 流水线处理器

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

2) 创建配置文件并放入 Include/Z.MapRoutes fodler(因此它将最后加载):

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