xDB 不存储任何交互
xDB not storing any Interactions
更新: 所以问题是我的应用程序 Global.asax.cs 不是从 Sitecore.Web.Application.
派生的
所以我刚刚安装了带有 MongoDB 2.6.11 的 Sitecore 8。
出于测试目的,我将下面的代码放在页面加载事件中以激活我之前在 sitecore 中创建的目标。
目标已通过部署和发布成功创建。我还确认了目标的项目 ID 是正确的。
if (Sitecore.Analytics.Tracker.IsActive && Sitecore.Analytics.Tracker.Current.CurrentPage != null)
{
Sitecore.Data.Items.Item GoaltoTrigger = Sitecore.Context.Database.GetItem("{EDA8EA2C-7AF5-4D0F-AF76-A9C4E6BD7169}");
if (GoaltoTrigger != null)
{
Sitecore.Analytics.Data.Items.PageEventItem registerthegoal = new Sitecore.Analytics.Data.Items.PageEventItem(GoaltoTrigger);
Sitecore.Analytics.Model.PageEventData eventData = Sitecore.Analytics.Tracker.Current.CurrentPage.Register(registerthegoal);
eventData.Data = GoaltoTrigger["Description"];
Sitecore.Analytics.Tracker.Current.Interaction.AcceptModifications();
}
}
Session.Abandon();
遗憾的是这没有用,我在 xDB 的交互下看不到目标。
我调查过的其他事情是我的布局肯定有标签
<sc:VisitorIdentification runat="server" />
我的 Global.asax 实施 Sitecore.Web.Application
public class Global : Sitecore.Web.Application
但运气不好。在 Mongo 中找不到交互(使用 mongo shell 和 roboMongo 来查找集合)。我还漏掉了什么吗?
Sitecore 错误
ManagedPoolThread #3 16:43:00 INFO Job ended: Sitecore.ListManagement.Analytics.UnlockContactListsAgent (units processed: )
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2918MB)
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2919MB)
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2920MB)
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2921MB)
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2922MB)
ManagedPoolThread #5 16:43:06 ERROR Failed to perform MaxMind lookup
ManagedPoolThread #5 16:43:06 ERROR Failed to perform GeoIp lookup for 127.0.0.1
Exception: Sitecore.Analytics.Lookups.CannotParseResponseException
Message: Unexpected format. Cannot parse the MaxMind response for IP address: 127.0.0.1
Source: Sitecore.Analytics
at Sitecore.Analytics.Lookups.MaxMindProvider.GetInformationByIp(String ip)
at Sitecore.Analytics.Lookups.GeoIpManager.GetDataFromLookupProvider(GeoIpHandle geoIpHandle)
12980 16:43:08 INFO Cache created: 'WebUtil.QueryStringCache' (max size: 19KB, running total: 2922MB)
2700 16:43:08 INFO HttpModule is being initialized
12360 16:43:08 INFO HttpModule is being initialized
7068 16:43:08 INFO HttpModule is being initialized
9940 16:43:10 INFO [Experience Analytics]: Reduce agent found zero segments to process
ManagedPoolThread #1 16:43:10 INFO Job started: Sitecore.ListManagement.Analytics.UnlockContactListsAgent
ManagedPoolThread #1 16:43:10 INFO Job ended: Sitecore.ListManagement.Analytics.UnlockContactListsAgent (units processed: )
触发目标
首先,这是触发目标的正确方法:
if (Sitecore.Analytics.Tracker.IsActive)
{
if (Sitecore.Analytics.Tracker.Current.CurrentPage != null)
{
var goalId = new Sitecore.Data.ID("{EDA8EA2C-7AF5-4D0F-AF76-A9C4E6BD7169}");
Sitecore.Analytics.Data.Items.PageEventItem goalToTrigger =
Sitecore.Analytics.Tracker.DefinitionItems.PageEvents[goalId];
if (goalToTrigger != null)
{
Sitecore.Analytics.Model.PageEventData eventData =
Sitecore.Analytics.Tracker.Current.CurrentPage.Register(goalToTrigger);
}
else
{
Sitecore.Diagnostics.Log.Error("Goal with ID " + goalId + " does not exist", this);
}
}
else
{
Sitecore.Diagnostics.Log.Error("Tracker.Current.CurrentPage is null", this);
}
}
else
{
Sitecore.Diagnostics.Log.Warn("The tracker is not active. Unable to register the goal.", this);
}
您不应在注册后尝试更改事件数据。
另外,你不应该调用 Interaction.AcceptModifications()
,因为这个方法是 xDB 在某些时候内部使用的东西。
CurrentPage.Register()
是您唯一需要做的事情。
结束会话
我不推荐使用 Session.Abandon()
。它可能会导致将您的交互保存到收集数据库中,但这样您会破坏 Sitecore 会话的正常流程。这可能导致的问题之一是交互的联系人将保持锁定状态 21 分钟(或者您的会话超时设置为 + 1 分钟)。
相反,出于测试目的,我建议您将会话超时设置为 1 分钟,并在最后一次页面请求后等待 1 分钟。此设置位于 Web.config 作为 <sessionState>
.
的属性
解决交互保存问题
- 确保
analytics
连接字符串设置正确。
- 确保您拥有 xDB 的许可证。您可以在 Sitecore 控制面板 –> 管理 –> 已安装的许可证中查看可用许可证列表。
a) 在 Sitecore 8.0 或更低版本中,许可证名称为 Sitecore.OMS
.
b) 在 Sitecore 8.1 中是 Sitecore.xDB.base
.
- 确保 xDB 及其跟踪子系统已启用。
a) 在 Sitecore 8.0 或更低版本中,Analytics.Enabled
应在 Sitecore.Analytics.config 中设置为 true
。
b) 在 Sitecore 8.1 中,Xdb.Enabled
和 Xdb.Tracking.Enabled
都应在 Sitecore.Xdb.config.
- 还应在站点定义上启用跟踪。
a) 在 Sitecore 8.0 或更低版本中,转到 Web.config 中的 <sites>
部分并检查 enableAnalytics
未 在 <site name="website">
或您正在使用的任何网站上设置为 false
。
b) 在 Sitecore 8.1 中,您应确保在 Sitecore.config.
- 在让会话过期之前尝试发出多个页面请求而不是一个。
- 尝试通过在 Sitecore.Analytics.Tracking.config[=78= 中将
Analytics.Robots.IgnoreRobots
和 Analytics.AutoDetectBots
设置为 false
来禁用机器人检测]。如果在此之后保存交互,我将使用进一步的说明更新我的答案。
- 如果没有任何帮助,请执行文章 Troubleshooting xDB data issues 中列出的步骤。
更新: 所以问题是我的应用程序 Global.asax.cs 不是从 Sitecore.Web.Application.
派生的所以我刚刚安装了带有 MongoDB 2.6.11 的 Sitecore 8。
出于测试目的,我将下面的代码放在页面加载事件中以激活我之前在 sitecore 中创建的目标。
目标已通过部署和发布成功创建。我还确认了目标的项目 ID 是正确的。
if (Sitecore.Analytics.Tracker.IsActive && Sitecore.Analytics.Tracker.Current.CurrentPage != null)
{
Sitecore.Data.Items.Item GoaltoTrigger = Sitecore.Context.Database.GetItem("{EDA8EA2C-7AF5-4D0F-AF76-A9C4E6BD7169}");
if (GoaltoTrigger != null)
{
Sitecore.Analytics.Data.Items.PageEventItem registerthegoal = new Sitecore.Analytics.Data.Items.PageEventItem(GoaltoTrigger);
Sitecore.Analytics.Model.PageEventData eventData = Sitecore.Analytics.Tracker.Current.CurrentPage.Register(registerthegoal);
eventData.Data = GoaltoTrigger["Description"];
Sitecore.Analytics.Tracker.Current.Interaction.AcceptModifications();
}
}
Session.Abandon();
遗憾的是这没有用,我在 xDB 的交互下看不到目标。
我调查过的其他事情是我的布局肯定有标签
<sc:VisitorIdentification runat="server" />
我的 Global.asax 实施 Sitecore.Web.Application
public class Global : Sitecore.Web.Application
但运气不好。在 Mongo 中找不到交互(使用 mongo shell 和 roboMongo 来查找集合)。我还漏掉了什么吗?
Sitecore 错误
ManagedPoolThread #3 16:43:00 INFO Job ended: Sitecore.ListManagement.Analytics.UnlockContactListsAgent (units processed: )
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2918MB)
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2919MB)
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2920MB)
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2921MB)
12980 16:43:05 INFO Cache created: '[no name]' (max size: 976KB, running total: 2922MB)
ManagedPoolThread #5 16:43:06 ERROR Failed to perform MaxMind lookup
ManagedPoolThread #5 16:43:06 ERROR Failed to perform GeoIp lookup for 127.0.0.1
Exception: Sitecore.Analytics.Lookups.CannotParseResponseException
Message: Unexpected format. Cannot parse the MaxMind response for IP address: 127.0.0.1
Source: Sitecore.Analytics
at Sitecore.Analytics.Lookups.MaxMindProvider.GetInformationByIp(String ip)
at Sitecore.Analytics.Lookups.GeoIpManager.GetDataFromLookupProvider(GeoIpHandle geoIpHandle)
12980 16:43:08 INFO Cache created: 'WebUtil.QueryStringCache' (max size: 19KB, running total: 2922MB)
2700 16:43:08 INFO HttpModule is being initialized
12360 16:43:08 INFO HttpModule is being initialized
7068 16:43:08 INFO HttpModule is being initialized
9940 16:43:10 INFO [Experience Analytics]: Reduce agent found zero segments to process
ManagedPoolThread #1 16:43:10 INFO Job started: Sitecore.ListManagement.Analytics.UnlockContactListsAgent
ManagedPoolThread #1 16:43:10 INFO Job ended: Sitecore.ListManagement.Analytics.UnlockContactListsAgent (units processed: )
触发目标
首先,这是触发目标的正确方法:
if (Sitecore.Analytics.Tracker.IsActive)
{
if (Sitecore.Analytics.Tracker.Current.CurrentPage != null)
{
var goalId = new Sitecore.Data.ID("{EDA8EA2C-7AF5-4D0F-AF76-A9C4E6BD7169}");
Sitecore.Analytics.Data.Items.PageEventItem goalToTrigger =
Sitecore.Analytics.Tracker.DefinitionItems.PageEvents[goalId];
if (goalToTrigger != null)
{
Sitecore.Analytics.Model.PageEventData eventData =
Sitecore.Analytics.Tracker.Current.CurrentPage.Register(goalToTrigger);
}
else
{
Sitecore.Diagnostics.Log.Error("Goal with ID " + goalId + " does not exist", this);
}
}
else
{
Sitecore.Diagnostics.Log.Error("Tracker.Current.CurrentPage is null", this);
}
}
else
{
Sitecore.Diagnostics.Log.Warn("The tracker is not active. Unable to register the goal.", this);
}
您不应在注册后尝试更改事件数据。
另外,你不应该调用 Interaction.AcceptModifications()
,因为这个方法是 xDB 在某些时候内部使用的东西。
CurrentPage.Register()
是您唯一需要做的事情。
结束会话
我不推荐使用 Session.Abandon()
。它可能会导致将您的交互保存到收集数据库中,但这样您会破坏 Sitecore 会话的正常流程。这可能导致的问题之一是交互的联系人将保持锁定状态 21 分钟(或者您的会话超时设置为 + 1 分钟)。
相反,出于测试目的,我建议您将会话超时设置为 1 分钟,并在最后一次页面请求后等待 1 分钟。此设置位于 Web.config 作为 <sessionState>
.
解决交互保存问题
- 确保
analytics
连接字符串设置正确。 - 确保您拥有 xDB 的许可证。您可以在 Sitecore 控制面板 –> 管理 –> 已安装的许可证中查看可用许可证列表。
a) 在 Sitecore 8.0 或更低版本中,许可证名称为Sitecore.OMS
.
b) 在 Sitecore 8.1 中是Sitecore.xDB.base
. - 确保 xDB 及其跟踪子系统已启用。
a) 在 Sitecore 8.0 或更低版本中,Analytics.Enabled
应在 Sitecore.Analytics.config 中设置为true
。
b) 在 Sitecore 8.1 中,Xdb.Enabled
和Xdb.Tracking.Enabled
都应在 Sitecore.Xdb.config. - 还应在站点定义上启用跟踪。
a) 在 Sitecore 8.0 或更低版本中,转到 Web.config 中的<sites>
部分并检查enableAnalytics
未 在<site name="website">
或您正在使用的任何网站上设置为false
。
b) 在 Sitecore 8.1 中,您应确保在 Sitecore.config. - 在让会话过期之前尝试发出多个页面请求而不是一个。
- 尝试通过在 Sitecore.Analytics.Tracking.config[=78= 中将
Analytics.Robots.IgnoreRobots
和Analytics.AutoDetectBots
设置为false
来禁用机器人检测]。如果在此之后保存交互,我将使用进一步的说明更新我的答案。 - 如果没有任何帮助,请执行文章 Troubleshooting xDB data issues 中列出的步骤。