Sitecore:当前联系人已被锁定以进行身份​​识别

时间:2015-10-20 11:24:20

标签: sitecore sitecore8 sitecore-xdb

当我尝试通过uniqke密钥请求参数识别当前联系人时:

Tracker.Current.CurrentPage.Session.Identify(Page.Request.QueryString["uniquekey"]);

我得到以下异常:

940 15:07:33 ERROR General error when submitting contact.
Exception: System.InvalidOperationException
Message: A contact is locked by another operation.
Source: Sitecore.Analytics.MongoDB
   at Sitecore.Analytics.Data.DataAccess.MongoDb.MongoDbContactStorage.LoadContactIdentifier(ID contactId, LeaseOwner leaseOwner)
   at Sitecore.Analytics.Data.DataAccess.MongoDb.MongoDbDataAdapterProvider.SaveContactWithIdentifier(IContact contact, ContactSaveOptions saveOptions)
   at Sitecore.Analytics.Data.DataAccess.MongoDb.MongoDbDataAdapterProvider.<>c__DisplayClass9.<SaveContact>b__7()
   at Sitecore.Analytics.Data.DataAccess.MongoDb.MongoDbDataAdapterProvider.Try(Action action)
   at Sitecore.Analytics.Data.DataAccess.MongoDb.MongoDbDataAdapterProvider.SaveContact(IContact contact, ContactSaveOptions saveOptions)
   at Sitecore.Analytics.Data.ContactRepository.SaveContact(Contact contact, ContactSaveOptions options)
   at Sitecore.Analytics.Tracking.ContactManager.SubmitContact(Contact contact, ContactSaveOptions options)

我该怎么做才能解决这个问题?或者有解决方法吗?

谢谢你,亲切的问候。

1 个答案:

答案 0 :(得分:2)

为什么会发生这种情况

通常,当您忘记在配置文件Analytics.ClusterName中设置Sitecore.Analytics.Tracking.config时,您会看到此错误。这成为一个问题,因为在每个会话开始时,Sitecore通过在xDB中创建Lease来锁定当前联系人。它使用Analytics.ClusterName作为锁的标识符。

您看到的错误是因为您的Sitecore实例没有意识到它拥有联系人的租约,因为租约所有者标识符丢失了。

如果您查看收藏数据库中的联系人,您可能会看到以下内容:

enter image description here

如您所见,Owner文档没有设置Identifier字段。这表明创建租约的实体未提供标识符(其值为空字符串或null)。

解决方案

要在开发环境中解决此问题,只需将Analytics.ClusterNameAnalytics.HostName设置值设置为您在访问应用程序时使用的本地域名,例如: sitecore

<setting name="Analytics.ClusterName" value="sitecore" />
<setting name="Analytics.HostName" value="sitecore" />

您可以详细了解这些设置here

更新:Sitecore已添加有关此问题的知识库文章:https://kb.sitecore.net/articles/965127