Sitecore:当前联系人已锁定以供识别

Sitecore: Current contact is locked for identification

当我尝试通过 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)

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

谢谢你和亲切的问候。

为什么会这样

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

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

如果您在收集数据库中查看您的联系人,您可能会看到类似这样的内容:

如您所见,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