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.ClusterName
和 Analytics.HostName
设置值都设置为您在访问应用程序时使用的本地域名,例如sitecore
.
<setting name="Analytics.ClusterName" value="sitecore" />
<setting name="Analytics.HostName" value="sitecore" />
您可以阅读有关这些设置的更多信息here。
更新: Sitecore 添加了一篇关于此问题的知识库文章:https://kb.sitecore.net/articles/965127
当我尝试通过 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.ClusterName
和 Analytics.HostName
设置值都设置为您在访问应用程序时使用的本地域名,例如sitecore
.
<setting name="Analytics.ClusterName" value="sitecore" />
<setting name="Analytics.HostName" value="sitecore" />
您可以阅读有关这些设置的更多信息here。
更新: Sitecore 添加了一篇关于此问题的知识库文章:https://kb.sitecore.net/articles/965127