Sitecore Experience Profile stopped working

Recently i got an issue where i see Sitecore Experience Profile stopped working and was not showing any records (not even Anonymous!!).

xProfile-Launchpad

Here are the things which i tried:

Enable Anonymous contacts:

  • In order to enable and show anonymous contacts in Experience profile navigate to xConnect root path.
  • Go to xConnectRootPath\App_data\jobs\continuous\IndexWorker\App_data\config\sitecore\SearchIndexer.
  • Open sc.Xdb.Collection.IndexerSettings.xml and set the value of IndexAnonymousContactData to true.

<IndexerSettings>
<Type>Sitecore.Xdb.Collection.Indexing.IndexerSettings, Sitecore.Xdb.Collection</Type>
<LifeTime>Singleton</LifeTime>
<Options>
<!– Indexer will split change set on chunks to improve memory consumption. Setting this option to 0, a negative value or removing the element completely, results in no splitting.–>
<SplitRecordsThreshold>25000</SplitRecordsThreshold>
<IndexPIISensitiveData>false</IndexPIISensitiveData>
<IndexAnonymousContactData>true</IndexAnonymousContactData>
</Options>
</IndexerSettings>

Fixed- Access to the registry key ‘Global’ is denied Issue:

Enabling Anonymous contacts didn’t solve the issue and profile records were still not visible, when i checked logs- i see the below error:

Access to the registry key ‘Global’ is denied” error

Exception: System.UnauthorizedAccessException
Message: Access to the registry key ‘Global’ is denied.
Source: mscorlib
at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)
at Microsoft.Win32.RegistryKey.InternalGetValue(String name, Object defaultValue, Boolean doNotExpand, Boolean checkSecurity)
at Microsoft.Win32.RegistryKey.GetValue(String name)
at System.Diagnostics.PerformanceMonitor.GetData(String item)
at System.Diagnostics.PerformanceCounterLib.GetPerformanceData(String item)
at System.Diagnostics.PerformanceCounterLib.get_CategoryTable()
at System.Diagnostics.PerformanceCounterLib.CategoryExists(String machine, String category)
at System.Diagnostics.PerformanceCounterCategory.Exists(String categoryName, String machineName)
at System.Diagnostics.PerformanceCounterCategory.Exists(String categoryName)
at Sitecore.Diagnostics.PerformanceCounters.PerformanceCounter.CanBeCreated()
at Sitecore.Diagnostics.PerformanceCounters.PerformanceCounter.InitializeCounter(Boolean reset)

To fix the above issue:

  • Open Computer Management –> System Tools –> Local Users and Groups –> Groups –> Performance Log Users
  • Add the identity to the Performance Log Users group.Performance-Log-Users
  • Restart AppPool for the XConnect website

Rebuild the xDB search index:

I rebuild the search index but this didn’t fixed the issue.

XConnect Avatar Facet Issue:

After some time we realized that the previous contacts are visible but only new contacts are not visible in the Experience profile and we also observed below error in the logs.

Sitecore.Xdb.Collection.Failures.DataProviderException: *** [xdb_collection.GetContactsChanges], Line 27. Errno 50000: Sync token is no longer valid for [Contacts] table. —> System.Data.SqlClient.SqlException: *** [xdb_collection.GetContactsChanges], Line 27. Errno 50000: Sync token is no longer valid for [Contacts] table.
at System.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__180_0(Task`1 result)
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Sitecore.Xdb.Sql.Common.Extensions.DbCommandExtensions.<>c__DisplayClass1_0.

When we checked this we found this the similar issue has already been reported by Rodrigo Peplau here- http://blog.peplau.com.br/en_US/xconnect-avatar-facet-breaking-experience-profile/

This issue is related to image length which has been uploaded in the Profile section of contact- when we removed the Avatar facets issue got fixed.

Our Sitecore version was 9.1 Initial release– however we didn’t observed this issue in Sitecore 9.0 versions.

Rodrigo Peplau has also provided the fix for this issue here- http://blog.peplau.com.br/en_US/part-2-xconnect-avatar-facet-breaking-experience-profile-follow-up/

Happy learning 🙂

Add contact image to experience profile in Sitecore 9

Adding contact image in Sitecore 9 is pretty straight forward, you might come across the requirement where you have to update the contact profile image in xProfile based on contact social profile or custom image URL.

xProfile-Image

Below code can be used to set the profile image using Avatar Facet.

var trackerIdentifier = new IdentifiedContactReference("xDB.Tracker", Sitecore.Analytics.Tracker.Current.Contact.ContactId.ToString("N"));
using (XConnectClient client = Sitecore.XConnect.Client.Configuration.SitecoreXConnectClientConfiguration.GetClient())
{
var contact = client.Get<Sitecore.XConnect.Contact>(trackerIdentifier, new Sitecore.XConnect.ContactExpandOptions());
if (contact != null)
{
    var profileImageUrl = "profile URL comes here";
    var objWebClient = new System.Net.WebClient();
    byte[] profileImageBytes = objWebClient.DownloadData(profileImageUrl);
    string mimeType= "image/jpeg";
    client.SetFacet<Avatar>(contact, Avatar.DefaultFacetKey, new Avatar(mimeType, profileImageBytes)
    {
        MimeType= mimeType,
        Picture= profileImageBytes
    });
    client.Submit();
}
}

Hope this helps!

Happy learning 🙂