Wednesday, January 31, 2018

Sitecore Experience Commerce - SiteUtilityPages path error

When attempting to install Sitecore Experience Commerce 9.0 the following error would appear:
Install-SitecoreConfiguration : Cannot validate argument on parameter 'Source'. The " Test-Path $_ " validation script
for the argument with value
"D:\Projects\MyProject\Install\CommerceDeploy\SIF.Sitecore.Commerce.1.0.1748\-ChildPathSiteUtilityPages" did not
return a result of True. Determine why the validation script failed, and then try the command again.
At D:\Projects\MyProject\Install\CommerceDeploy\SIF.Sitecore.Commerce.1.0.1748\Deploy-Sitecore-Commerce.ps1:70 char:1
+ Install-SitecoreConfiguration @params
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Install-SitecoreConfiguration
The problem traces back to the installation PowerShell script and the following line:
SiteUtilitiesSrc = ( Join-Path -Path $DEPLOYMENT_DIRECTORY -ChildPath"SiteUtilityPages" )
There is no space after the -ChildPath which screws up the path in PowerShell, it should be:
SiteUtilitiesSrc = ( Join-Path -Path $DEPLOYMENT_DIRECTORY -ChildPath "SiteUtilityPages" )
The installation will now continue as expected.

Sitecore Experience Commerce - Cannot find certificate during install

When running the install script for Sitecore Experience Commerce 9.0, the following error message may appear:
Resolve-Path : Cannot find path 'D:\Projects\MyProject\Install\CommerceDeploy\storefront.engine.cer' because it does
not exist.
At D:\Projects\MyProject\Install\CommerceDeploy\SIF.Sitecore.Commerce.1.0.1748\Deploy-Sitecore-Commerce.ps1:44 char:33
+ ... EngineCertificatePath = Resolve-Path -Path "..\storefront.engine.cer"
+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (D:\Projects\Foo...ront.engine.cer:String) [Resolve-Path], ItemNotFoundE
   xception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.ResolvePathCommand
 This is because a parameter was missed when looking over the install PowerShell script. Ensure that CommerceEngineCertificatePath points to the correct .cer file (exported at an earlier step in the installation guide for Experience Commerce).

Sitecore Experience Commerce - Install script does not run

When attempting to run the install PowerShell script for experience commerce, the script will not run and instead give the following error:
At D:\Projects\MyProject\Install\CommerceDeploy\SIF.Sitecore.Commerce.1.0.1748\Deploy-Sitecore-Commerce.ps1:72 char:45
+ elseif ($CommerceSearchProvider -eq "AZURE"){
+                                             ~
Missing closing '}' in statement block or type definition.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingEndCurlyBrace
Missing closing '}' 
If you copied the install script out of the installation guide, there is a missing closing curly brace at the end of the file.

The missing curly brace

Sitecore Experience Commerce - Braintree error during install

During the install of Sitecore Experience Commerce 9.0, when trying to run the install script the following error occurred:
At D:\Projects\MyProject\Install\CommerceDeploy\SIF.Sitecore.Commerce.1.0.1748\Deploy-Sitecore-Commerce.ps1:62 char:18
+  BraintreeAccount @{
+                  ~
Missing '=' operator after key in hash literal.
At D:\Projects\MyProject\Install\CommerceDeploy\SIF.Sitecore.Commerce.1.0.1748\Deploy-Sitecore-Commerce.ps1:72 char:45
+ elseif ($CommerceSearchProvider -eq "AZURE"){
+                                             ~
Missing closing '}' in statement block or type definition.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : MissingEqualsInHashLiteral
Error in install script related to Braintree config
This is a simple error where the deploy script referenced in the deploy guide was missing an equals sign. The Deploy-Sitecore-Commerce.ps1 script should be fixed up to appear as follows:
BraintreeAccount = @{
MerchantId = ''
PublicKey = ''
PrivateKey = ''
}
MerchantId should also not have a capitalized letter d on Id.

Sitecore 9 Install - unrecognized escape sequence or illegal path

During the install of Sitecore 9 (update-1) locally, the SIF script was giving the following error:
ConvertFrom-Json : Unrecognized escape sequence.
Sitecore 9 - Unrecognized escape sequence
The issue was the file path was not escaped correctly, in the xconnect-xp0.json file I needed file paths to be escaped as follows:
D:\\Projects\\MyProject\\Install\\Deploy
If you try re-running the script the following error may occur:
Install-SitecoreConfiguration : Unable to parse [resolvepath(parameter('Package'))] - Exception calling"InvokeWithContext" with "2" argument(s): "The running command stopped because the preference variable"ErrorActionPreference" or common parameter is set to Stop: Illegal characters in path."
Sitecore 9 - Illegal path
Paths will also need to be escaped in the sitecore-XP0.json file.

You may also need to escape the path in the install.ps1 script the installation guide gives you the option of creating.

Also please check the the references to Package = "$PSScriptRoot\\Sitecore 9.0.1 rev. 171219 (OnPrem)_xp0xconnect.scwdp.zip" are on a single line and does not go over into two lines (numbered).

Filename incorrectly goes onto two lines
Fixing these issues should allow the script to work as intended.

Sitecore 9 install - SOLR instance not found

When installing Sitecore 9 (update-1) locally the following error was occurring:
Install-SitecoreConfiguration : Could not complete request for https://localhost:8989/solr - Unable to connect to the remote server
Sitecore 9 SOLR instance not found during install
The SOLR instance was not able to be found. I had encountered this error before when installing Experience Commerce, however this was a certificate issue.

In this case, it was a port mismatch. The example install PowerShell script supplied in the installation guide made reference to:
$SolrUrl = "https://localhost:8989/solr"
Which looked correct at a quick glance, however the port I was using locally was 8983:
$SolrUrl = "https://localhost:8983/solr"
Making this change allowed the install to proceed.

Sitecore 9 install - error finding SOLR service

When installing a clean version of Sitecore 9 (update-1) the following error was thrown by the Sitecore Installation Framework (SIF):
Install-SitecoreConfiguration : Service 'Solr 6.6.2 (solr6.6.2)' cannot be configured due to the following error: The specified service does not exist as an installed service

Sitecore 9 install error in PowerShell
Looking at my services list, I could see one with the name SOLR 6.6.2:

SOLR Service
However in a clean PowerShell window, it appears that the command to get the service only works without the space:

Correct name of SOLR service
Updating my Sitecore 9 install script to use the service name without the space, fixes this error.

Sitecore Experience Commerce - BootStrapping Commerce Services Error

When installing Sitecore Experience Commerce 9.0 on a local environment, the following error occurred:
BootStrapping Commerce Services: http://localhost:5005/commerceops/Bootstrap()
**********************
Command start time: 20180111100414
**********************
PS>TerminatingError(Invoke-RestMethod): "The remote server returned an error: (500) Internal Server Error."
This drills down to the Customer.Sample.Solution.sln solution which was compiled into a zip file and placed in C:\MyDeploy\Content\Engine. At the time of writing, the reference projects inside this solution were using the .NET Framework 4.6.2 which need to be updated to 4.7. This can be achieved by installing the dev pack for .NET Framework 4.7 and changing the target framework for the solutions using Visual Studio 2017.

Changing the target framework to 4.7
The solution can then be re-published and placed in the correct directory (inside a zip file).

Sitecore Experience Commerce - SOLR instance not found during installation

During the installation of Sitecore Experience Commerce 9.0, the following error would occur:
TerminatingError(Invoke-ManageSolrCoreTask): "The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Could not find Solr instance: https://solr-dev.local:8983/solr/"
Install-SitecoreConfiguration : Could not find Solr instance: https://solr-dev.local:8983/solr/
When I loaded the https://solr-dev.local:8983/solr/ URL in my browser it would load (however with a invalid certificate warning). It turns out the the certificate used with my SOLR instance was only valid with the localhost domain, which meant the install script would not load it with any other domain (without fixing the SSL certificate).

So I simply changed the SolrUrl parameter and re-ran the installation script.
SolrUrl = "https://localhost:8983/solr"

Sitecore Experience Commerce - Access to package denied during installation

During the installation of Sitecore Experience Commerce on my local machine, the following error appeared a few times referencing a number of packages:
Access to the path 'C:\inetpub\wwwroot\sc9test_.sc\sitecore\admin\Packages\Sitecore.Commerce.Engine.Connect.2.0.495.update' is denied. 
This one was an interesting one, the installation script was expecting Sitecore.Commerce.Engine.Connect.2.0.495.update however I had Sitecore.Commerce.Engine.Connect.2.0.497.update. The script would create a folder called Sitecore.Commerce.Engine.Connect.2.0.495.update in the packages directory (of the IIS website) and then throw the error above.

This can either be fixed up by renaming the file to match that of the script or by updating the script. It's not actually a permissions issue.

Sitecore Experience Commerce - The service cannot accept control messages at this time

During the installation of Sitecore Experience Commerce, the following error would sometimes occur when attempting to re-run the installation script after it had failed previously:
TerminatingError(Start-WebItem): "The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: The service cannot accept control messages at this time. (Exception from HRESULT: 0x80070425)"
This error is caused by the Sitecore 9 IIS web site being stopped, which stops a package being installed as part of the installation process. Starting the Sitecore 9 IIS web site and waiting a few seconds, then re-running the installation script should work.

Sitecore Experience Commerce - SOLR directory cannot be removed

When installing Sitecore Experience Commerce on my local machine, I came across a number of errors, and each time re-ran the install PowerShell script in full. However, this would cause the following error to appear:
TerminatingError(Remove-Item): "The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Directory C:\solr\server\solr\sc9test_.scCustomersScope\data\index cannot be removed because it is not empty."
Install-SitecoreConfiguration : Directory C:\solr\server\solr\sc9test_.scCustomersScope\data\index cannot be removed
This error is caused when trying to remove a SOLR core which is in use (as the install script removed it before trying to create it). Before re-running the installation script, load up your SOLR admin and unload the three commerce SOLR cores.

SOLR admin - unloading commerce cores
The three cores to unload are:

  1. sc9test_.scCatalogItemsScope
  2. sc9test_.scCustomersScope
  3. sc9test_.scOrdersScope
The sc9test_.sc at the start may change depending on your instance name (set in parameters), it's the second part that will matter. Unloading these three cores, allowed the installation to continue.

Sitecore Experience Commerce - SOLR 404 on install

During the installation of Sitecore Experience Commerce 9.0 I encountered the following error:
TerminatingError(Invoke-RestMethod): "Error 404 Not Found HTTP ERROR 404 Problem accessing /solr//admin/cores. Reason: Not Found"
This one was quite a simple one to fix, in the parameters in the installation PowerShell file, the SolrUrl parameter had a "/" at the end:
SolrUrl = "https://localhost:8983/solr/
This is incorrect, as the installation framework adds the trailing slash, and two of them causes a 404 in SOLR. So the correct parameter would be:
 SolrUrl = "https://localhost:8983/solr
The installation continued as expected after changing this value.

Sitecore Experience Commerce - Install-WindowsFeature error during installation

When installing Sitecore Experience Commerce 9.0 on my local developer machine (Windows 10 professional), the following error occurred:
[--------------------------------- CreateWebAppPoolMinions : ManageCommerceService -----------------------------------]
[CreateWebAppPoolMinions]:[Create-WebAppPool] CommerceMinions_Sc9
Creating and starting the CommerceMinions_Sc9 Services application pool
**********************
Command start time: 20180110222144
**********************
PS>TerminatingError(Invoke-ManageCommerceServiceTask): "The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: The term 'Install-WindowsFeature' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again."
I then installed Remote Server Administration Tools on my machine which then allows this feature to work in PowerShell (after running import-module servermanager). However this then led to the following error message:
TerminatingError(Install-WindowsFeature): "The target of the specified cmdlet cannot be a Windows client-based operating system."
It appears that the Install-WindowsFeature command in PowerShell is only available on Windows Server. After searching through the PowerShell files I found the following line in the ManageCommerceServices.psm1 file:
Install-WindowsFeature -Name Web-AppInit
I simply commented this file out to get the installation to continue, and ensured that the feature was installed manually.

Sitecore Experience Commerce - Cannot validate argument on parameter Path

During the installation of Sitecore Experience Commerce 9.0 the following error appeared in the PowerShell window:
Extracting CommerceServices from  to C:\inetpub\wwwroot\CommerceOps_Sc9 
PS>TerminatingError(Expand-Archive): "Cannot validate argument on parameter 'Path'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again." 
>> TerminatingError(Invoke-DeployCommerceContentTask): "The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Cannot validate argument on parameter 'Path'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again."
This was caused because the engine and identity server projects should be compiled into a zip file and not just a folder.

This is the correct example - the project output is contained in a zip file
The files simply appearing in the folder is incorrect and will cause the error
This was quite a simple fix, and once zipped the install should progress as expected.

Monday, January 22, 2018

Sitecore WFFM SQL Errors

In a version 8.2 instance of Sitecore with version 8.2 of WFFM (rev. 161129), I was programatically submitting data to a WFFM form. The code would run through with no exceptions, however the form reports never had any data in them. Looking into the log files was showing the following errors:
Exception: System.Exception
Message: Invalid object name 'dbo.Fact_FormSummary'.
Source: Sitecore.Kernel 
Exception: System.Data.DataException
Message: Error executing SQL command: SELECT [FieldId],[dbo].[FormFieldValues].[FieldValueId],[dbo].[FormFieldValues].[FieldValue], [dbo].[Fact_FormSummary].[FieldName], [Count]
  FROM [dbo].[Fact_FormSummary], [dbo].[FormFieldValues]
  WHERE [dbo].[Fact_FormSummary].FieldValueId = [dbo].[FormFieldValues].FieldValueId AND FormId = @FormId 
Exception: System.Exception
Message: Invalid object name 'dbo.Fact_FormStatisticsByContact'.
Source: Sitecore.Kernel 
Exception: System.Data.DataException
Message: Error executing SQL command: SELECT df.Dropouts, df.Failures, df.Submits, df.Success, dv.Visits FROM
(SELECT [dbo].[Fact_FormStatisticsByContact].[FormId] AS FormId, 
SUM([dbo].[Fact_FormStatisticsByContact].[Submits]) AS Submits, SUM([dbo].[Fact_FormStatisticsByContact].[Failures]) AS Failures,
SUM([dbo].[Fact_FormStatisticsByContact].[Dropouts]) AS Dropouts, SUM([dbo].[Fact_FormStatisticsByContact].[Success]) AS Success
FROM [dbo].[Fact_FormStatisticsByContact] WHERE [dbo].[Fact_FormStatisticsByContact].[FormId] = @FormId
group by [dbo].[Fact_FormStatisticsByContact].[FormId]) df INNER JOIN
(SELECT Count(distinct [dbo].[Fact_FormEvents].[InteractionId]) AS Visits,
[dbo].[Fact_FormEvents].[FormId] AS FormId 
  FROM [dbo].[Fact_FormEvents]
  WHERE FormId = @FormId
  GROUP BY [dbo].[Fact_FormEvents].[FormId]  ) dv ON df.FormId = dv.FormId
In this case, the local machine I was developing off was using a base version of the Sitecore reporting database. This meant that the required WFFM install SQL script was not run on the database, hence all of the errors.

Inside the website root is a data folder (C:\inetpub\wwwroot\MyWebsite\Website\Data) which contains a WFFM_Analytics.sql file, running this on the reporting database will resolve the issue. If this file is not present, it can be found inside the install package for your version of WFFM.

Sitecore WFFM Collection is read-only error

In a version 8.2 instance of Sitecore with version 8.2 of WFFM (rev. 161129), the following error occurred when trying to add a new field to the form.
Collection is read-only.
Sitecore WFFM collection is readonly - initial screen

Sitecore WFFM collection is readonly - expanded state
In this case, the form had been added as the Form template (/sitecore/templates/Web Forms for Marketers/Form) which is correct, but there was no child template of type Form Section (/sitecore/templates/Web Forms for Marketers/Form Section). By inserting a new form section child item, I was then able to add fields as desired.

Sitecore WFFM form template with form section child item

Friday, January 19, 2018

Sitecore Lucene not returning results for some languages

After expanding a Sitecore 8.1 site to offer content in multiple languages there was a strange error where the search in some languages (pt-BR in particular) would not return any results. This was happening even with a wildcard search that should return all results.

I checked the physical index (using version 3.5 of the Luke tool) and confirmed there were documents indexed with the target language (and these were not opted out of search results).

Luke tool shows the target language indexed.
The original code was using a where clause to filter based on the context language:
.Where(x => x.Language == Sitecore.Context.Language.Name)
Which was not working for some reason, so I tried changing the code to then get results based on culture:
searchItems = context.GetQueryable<SearchResultItem>(new CultureExecutionContext(culture))
After this change the search was returning items in all languages as expected.

Thursday, January 18, 2018

Sitecore xConnect - access to the registry key Global is denied

After checking my xConnect logs to ensure all was running smoothly the following error was present:
[Error] Access to the registry key 'Global' is denied.
System.UnauthorizedAccessException: Access to the registry key 'Global' is denied.
The fix for this error is to simply add the identity of the application pool that the xConnect site uses to the local group: Performance Monitor Users.

Performance Monitor Users group
In my case this user was IIS AppPool\sc9test_.xconnect - with the part following IIS AppPool being the name of the application pool.

Wednesday, January 17, 2018

Sitecore 9 analytics data not loading

After installing a fresh copy of Sitecore 9, I noticed that none of my Experience Analytics or Experience Profile data was showing.

Sitecore 9 - Experience Analytics errors
Sitecore 9 - Experience Profile errors
Looking into the developer tools console in Chrome I notice the following error:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
This was for an analytics API call: http://MyDomain/sitecore/api/ao/v1/aggregates/latest-visitors?&pageSize=20&pageNumber=1&sort=LatestVisitStartDateTime%20desc

Sitecore logs files were quite full and the following stood out:
Exception: System.IO.IOException
Message: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
Source: System
   at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult)
   at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar)
Nested Exception
Exception: System.Net.Sockets.SocketException
Message: An existing connection was forcibly closed by the remote host
Source: System
   at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
   at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult)
It appeared to be an error in connecting with xConnect. I tried to load the xConnect URL in my browser and the site would not load. Looking at the certificate that my xConnect was configured to use, I noticed that it was issues to a different domain name (sc9test_.xconnect instead of sc9test_.xconnect_client).

After changing the binding in IIS, adding it to my local hosts file and updating the connection string in Sitecore, the analytics errors disappeared.

The xConnect site would also load in my local browser as expected:
Sitecore xConnect loading in browser

Friday, January 12, 2018

Planning, preparing and performing a Sitecore upgrade

With the feature set of the Sitecore Experience Platform continuing to grow and improve with each new version, you definitely wont want to get left behind. It's also worth noting that the longer you leave the upgrade (the further you get behind) then the longer in terms of time, cost and difficulty the upgrade is likely to be.

This post is going to be a general overview of the upgrade process that will contain learnings from the Sitecore upgrades I have undertaken.

Planning the upgrade path

The first step is to head over to the Sitecore developer site, and locate the upgrade guide for the version of Sitecore you wish to upgrade to.

Sitecore upgrade guide download
In this case I am looking to upgrade from version 8.1 (initial) to 9 (update 1), so I download the upgrade guide for Sitecore version 9 (update 1). Then take a look at the prerequisites:

Sitecore upgrade prerequisites
In this case, I can upgrade directly from my current version. If however I was on version 8.0, then I would need to upgrade to 8.1 before going to 9 (again the upgrade guide would be downloaded for 8.1). This will then give us the upgrade path for the CMS. Effectively you are working backwards from the version you wish to end up on until you hit your current version.

The same can be done with any modules which may be installed (WFFM, EXM, SXA, etc.).

Preparing for the upgrade

Before undertaking the upgrade there are a few steps that need to be completed:
  1. Download the upgrade guide for each Sitecore version and module to be installed.
  2. Download and extract upgrade packages for each Sitecore version and modules to be installed.
  3. If required download an upgrade files required for Sitecore upgrade packages (such as SQL scripts or configs).
  4. If required download the update package for the update installation wizard.
  5. Backup the environment (database and servers) to be upgraded.
  6. Create a source control branch for the version of Sitecore you are upgrading to. Once you upgrade to a given version on your local environment, you will need to update custom code to work with that version (DLL and code changes).
You can now create an organized folder structure of the packages to install:

Top level folder structure for Sitecore upgrade
Expanded folder structure for Sitecore upgrade
In the case of the production upgrade, you may wish to clone the production environment, and simply switch the DNS once the upgrade has been validated.

Complete the upgrade

The upgrade guide will cover the required steps to upgrade the Sitecore CMS or a given module, however the likely process will be as follows (at a high level):
  1. Run a SQL script on the Sitecore databases.
  2. Install an update for the update installation wizard. This is the tool which takes the update file and runs through it - yes it update itself.
  3. Install the update package.
  4. Fix any conflicts (such as a configuration file which was edited manually and needs to be replaced with the upgraded one).
  5. Deploy any custom code.
  6. Perform a full publish.
These steps will need to be followed on all servers in a given environment (CD or CM, etc.). Once you have installed the Sitecore CMS update, then you would install all the required update packages for any module(s) you have.

Tips for a Sitecore upgrade

  1. Create backups of the IIS web site root along the way.
  2. With major upgrades there may be a lot of code changes required in your custom solution.
  3. Third party tools such as Glass Mapper or TDS may also need to be upgraded (in your code solution).
  4. When you have two identical servers (such as two CD servers behind a load balancer) you can upgrade one and copy the update web root to the other. Ensure there are no differences between the web roots first.
  5. Always leave extra time in any estimates you make, something you don't consider is likely to come up.
  6. Always upgrade a local development environment first, this also gives you a chance to upgrade your custom code solution.
  7. Check the logs after an upgrade for anything that may have arisen.
  8. Check for any broken links after an upgrade - using the admin tool.
  9. Depending on the size/complexity of an upgrade a smoke test right through to a full regression test may be needed. 
  10. Progress the upgrade through each environment (development -> staging -> production ...), testing along the way.

Conclusion

This was a short and simple post to cover off several areas which should assist someone in completing their first upgrade. Practice makes perfect, so don't be afraid to back up a local Sitecore environment and give it a go - if all else fails you can blow it away and restore the backup.

Sitecore SXA page appearing as $name in navigtation

A strange error came up on a Sitecore web site built using the Sitecore Experience Accelerator. A footer navigation item was appearing as $name (the display text), and linked off correctly to the page.

Looking at the page in the content editor, a yellow message appeared saying: If you publish now, the selected version will not be visible on the web site as it is unpublishable.

Sitecore item unpublishable
This can be resolved (assuming the item should be published and appear in the footer) by going to the publish ribbon item and selecting change.

Publish ribbon > Change
Then once the popup modal appears, ensure that the publishable checkbox is checked. Then publish the item and the $name issue is resolved.

Publishing Settings

Tuesday, January 9, 2018

Sitecore SQL Server timeout on full publish

After completing a Sitecore upgrade, and attempting to run a full publish, it would not complete and instead ended up with the following error:
Job started: Publish to 'web'|#Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Data.SqlClient.SqlException: Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception: The wait operation timed out
   --- End of inner exception stack trace ---
Sitecore full publish times out
Inside the Sitecore.config file (Website\App_Config) is a setting called DefaultSQLTimeout. In my case this was set to 5 minutes, by increasing this (temporarily) to 15 minutes the full publish was able to complete without any issues.