Sitecore: текущий контакт заблокирован для идентификации
Когда я пытаюсь определить текущий контакт с помощью параметра запроса ключа 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 ответ
Почему это происходит
Обычно вы увидите эту ошибку, когда забудете установить Analytics.ClusterName
в файле конфигурации Sitecore.Analytics.Tracking.config
, Это становится проблемой, потому что в начале каждой сессии Sitecore блокирует текущий контакт, создавая Lease
в xDB. Оно использует Analytics.ClusterName
в качестве идентификатора блокировки.
Ошибка, которую вы видите, происходит потому, что ваш экземпляр Sitecore не осознает, что он владеет арендой для контакта, так как идентификатор владельца аренды отсутствует.
Если вы посмотрите на свой контакт в базе данных коллекции, вы, вероятно, увидите что-то вроде этого:
Как видите, Owner
документ не имеет Identifier
набор полей. Это означает, что объект, создавший аренду, не предоставил идентификатор (его значение было пустой строкой или null
).
Решение
Чтобы решить эту проблему в среде разработки, просто установите оба Analytics.ClusterName
а также Analytics.HostName
установка значений для имени локального домена, которое вы используете при доступе к приложению, например sitecore
,
<setting name="Analytics.ClusterName" value="sitecore" />
<setting name="Analytics.HostName" value="sitecore" />
Вы можете прочитать больше об этих настройках здесь.
ОБНОВЛЕНИЕ: Sitecore добавил статью базы знаний об этой проблеме: https://kb.sitecore.net/articles/965127