当我尝试通过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)
我该怎么做才能解决这个问题?或者有解决方法吗?
谢谢你,亲切的问候。
答案 0 :(得分:2)
通常,当您忘记在配置文件Analytics.ClusterName
中设置Sitecore.Analytics.Tracking.config
时,您会看到此错误。这成为一个问题,因为在每个会话开始时,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