Sitecore on Azure web apps – Trouble Shooting error – AppGallery Deploy Failed – System.ArgumentException: Missing mandatory parameters for valid Shared Access Signature

We were trying to deploy Sitecore XP1 environment on Azure Web App. To deploy Siecore on azure web apps we need to provide Web Deploy Packages as input to Azure. as per this link {}, sitecore recommend deploy the Web Deploy Packages to Azure Storage Account in Blob Container. To allow access for downloading these packages, we have created Shared Access Signatures and added the SAS Token correctly to the Blob Service in my parameter.json file. While deploying the Sitecore XP1 instance we go the below error.

Error Message: AppGallery Deploy Failed: ‘System.ArgumentException: Missing mandatory parameters for valid Shared Access Signature

Details:

{ “status”: “failed”, “error”: { “code”: “ResourceDeploymentFailure”, “message”: “The resource operation completed with terminal provisioning state ‘failed’.”, “details”: [ { “code”: “Failed”, “message”: “AppGallery Deploy Failed: ‘System.ArgumentException: Missing mandatory parameters for valid Shared Access Signature\r\n at Microsoft.WindowsAzure.Storage.Core.Util.NavigationHelper.ParseBlobQueryAndVerify(Uri address, StorageCredentials& parsedCredentials, Nullable`1& parsedSnapshot)\r\n at Microsoft.WindowsAzure.Storage.Core.Util.NavigationHelper.ParseBlobQueryAndVerify(StorageUri address, StorageCredentials& parsedCredentials, Nullable`1& parsedSnapshot)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlob.ParseQueryAndVerify(StorageUri address, StorageCredentials credentials)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlob..ctor(StorageUri blobAbsoluteUri, Nullable`1 snapshotTime, StorageCredentials credentials)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.IsPremiumApp()\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.CheckCanDeployIfAppIsPremium(AppGalleryPackageInfo packageInfo, Boolean& isPremium)’\r\nFailed to download package.\r\nAppGallery Deploy Failed: ‘System.Net.WebException: The remote server returned an error: (403) Forbidden.\r\n at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)\r\n at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)\r\n at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.<Download>d__a.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.AppGalleryPackage.<Download>d__0.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.<DownloadPackageAndSettings>d__1b.MoveNext()\r\n— End of stack trace from previous location where exception was thrown —\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at Microsoft.Web.Deployment.WebApi.DeploymentController.<DownloadAndDeployPackage>d__d.MoveNext()'” } ] } }
From error message, you can understand that Server couldn’t authorize the request and so it returned 403 forbidden error and the Web Deploy Packages couldn’t be downloaded.

There are couple of solutions you can try -

1. When you generate the Shared Access Signature, you should be careful with the Start Time and TimeZone.
By default, it takes, UTC. You should be setting your local Timezone.
Please make sure you set start time less then the current time. Hopefully this will resolve this issue but if you are still facing the same issue then you can try an alternative approch mentioned in second post

2. Instead of using storage account on azure you can deploy you SCWDP (Sitecore web deply package) to some server in your network and pass URL of this file as parameter in ARM parameter file. URL of SCWDP.zip file must accessable to your azure account. It should resolve the above issue

Azure Search Sitecore

Azure Search – Sitecore

With the advancing technology, you can’t continue using the same methods and tools for your business every time. It is essential to make use of the new technologies and tools so as to meet the changing and growing needs and demands of your business. One such new technology that has come up is Sitecore, which acts as an extensible platform to capture, store, manage and distribute your content in a secure and reliable manner. It is getting massively popular amongst businesses because of the flexibility, security and scalability that it provides, which helps in enhancing user experience and allows businesses to effectively maintain their online brand presence and visibility. Sitecore CMS enables businesses to have full control of their website.

Sitecore Azure

Although Sitecore itself has had a lot of success as an ‘on-premises’ software solution and content management system that facilitates on-premises deployments, deploying #Sitecore on #Azure makes it even more better as ‘Sitecore Azure’.

azure-search-1

There are two very important terms in Sitecore Azure:

1. Azure Search – Sitecore

2. Redis Cache – Sitecore

Here in this post, we are going to know in depth about Azure Search feature of Sitecore.

Sitecore Azure Search

Sitecore Azure Search provider integrates the Sitecore Search engine with Microsoft Azure’s Search Service, which is a part of Microsoft Azure computing platform.

Features of Azure Search

Which features of Azure Search make it a good deal to deploy Sitecore on Azure? And how does Azure Search – Sitecore help businesses? Some of the beneficial features of Azure Search services of Sitecore are as follows:

1. Azure Search offers extreme simplicity, scalability and stability that can be utilized to boost the user experience and performance on any business website.

2. You get support for all Sitecore search-driven UIs, including user-typed queries, and faceted searches.

3. Sitecore Azure Search also provides support for the majority of LINQ expressions, to enable rapid development of search-powered applications.

4. You get local/native support for fundamental data types such as numbers and dates in faceting, and range queries.

5. With Sitecore Azure Search, you get flexible configuration and precise control over the schema of the indexes.

6. It also offers support for running Sitecore in geo-replicated scenarios.

It is important to note here that Sitecore Azure Search is the default provider for Sitecore instances that are deployed using Sitecore Azure SDK.  Sitecore Azure Search supports on-premises and IaaS (Infrastructure as a Service) deployments. However, you shall have to configure Azure Search service with your Sitecore instance by creating a Search service, formatting the connection strings, setting up configuration files, rebuilding the indexes, mapping the Azure field types and fields and support for Azure Search.

How is Sitecore Azure Search different from Lucene and Solr search providers?

While using Sitecore Azure Search you must be aware that Sitecore Azure Search is different from the Lucene and Solr search providers. This is important to know, especially when you plan to switch between search providers.

azure-search-2.jpg

Azure Search Service is a fully managed, cloud-based service that allows developers to build rich search applications using REST APIs. This includes full-text search scoped over your content, along with advanced search behaviours similar to the ones found in commercial web search engines, like type-ahead, suggested queries based on near matches, and faceted navigation.

You can use Solr if you have a scaled environment with two or more delivering servers or two or more content authoring servers or in case you have separate servers for email, processing, reporting and publishing. The indexes are available to all servers in the environment.

On the other hand Lucene is a file-based indexing system, which means that if an index is not located on the server that the request is coming from you have to ensure that indexes across all servers remain in sync.

In the coming post, I shall also be talking about Redis Cache, what it is about and what it has to do with Sitecore.

Migrate Sitecore SQL databases to Amazon RDS

This blog post will guide you to migrate Sitecore SQL Server databases to Amazon RDS.

Unfortunately, you won’t be able to directly use the MDF and LDF files in AWS at the moment so to migrate SQL database to Amazon RDS we are going to use SQL Azure Migration Wizard. Follow below steps for migration –

  1. Before starting migration please make sure
    1. You are able to connect to Amazon RDS. To check it you can utilize SQL Server Management Studio
  2. Down SQL Azure Migration Wizard tool
    1. Extract the downloaded zip file and open SQLAzureMW.exe file.
  3. Start migration
    1. Once you open SQLAzureMW.exe. you will see a page like shown in below image. In this step you have to select process. Since we are migrating Sitecore database so we will select Database under Analyze/Migrate. For Target Server dropdown list select Azure SQL Database and click next
      1Script Wizard<br /><br /><br /><br /><br /><br />
Select Process<br /><br /><br /><br /><br /><br />
Select the process you want the wizard to wak you through.<br /><br /><br /><br /><br /><br />
SQLAzureMW<br /><br /><br /><br /><br /><br />
This wizard gives you the options to anayzes, generate scripts,<br /><br /><br /><br /><br /><br />
and migrate database schemas and data from:<br /><br /><br /><br /><br /><br />
1) SQL Server to Azure SQL Database.<br /><br /><br /><br /><br /><br />
2) Azure SQL Database to SQL Server<br /><br /><br /><br /><br /><br />
3) Azure SQL Database to Azure SQL Database<br /><br /><br /><br /><br /><br />
It will also anayze SQL Profiler trace files and TSQL script for<br /><br /><br /><br /><br /><br />
compatibiltö,' Sues with Azure SQL Database.<br /><br /><br /><br /><br /><br />
NOTE: You must be DB Owner in order to anayze or migrate a<br /><br /><br /><br /><br /><br />
database.<br /><br /><br /><br /><br /><br />
Target Server<br /><br /><br /><br /><br /><br />
Anayze Onty<br /><br /><br /><br /><br /><br />
O SQL Profiler Trace File<br /><br /><br /><br /><br /><br />
O TSQL Folder<br /><br /><br /><br /><br /><br />
Anayze / Migrate<br /><br /><br /><br /><br /><br />
@ Database<br /><br /><br /><br /><br /><br />
O TSQL File<br /><br /><br /><br /><br /><br />
Run TSQL without Anayzng<br /><br /><br /><br /><br /><br />
O TSQL File<br /><br /><br /><br /><br /><br />
Server Maintenance<br /><br /><br /><br /><br /><br />
O Maintenance<br /><br /><br /><br /><br /><br />
Azure SQL Database<br /><br /><br /><br /><br /><br />
< Back<br /><br /><br /><br /><br /><br />
Next >
  4. Choose Source database
    1. This step allows you to choose the source database. First connect to your SQL server database by providing connection details. Once database server is connected successfully select source database and click on the button that says ‘Next.’ Please see below image
      5
  5. Choose action
    1. Once source database is selected then in this step select an option named as ‘Script all database objects’. This option can enable to do the complete migration of the database. But if you don’t want to migrate entire database then you select an option that says ‘Select specific database objects.’ Please see below image
      3
  1. Create SQl script
    1. Tool will create script of selected source database for the objects selected in previous step. You should save the script on local hard drive and the move ahead by hitting a click on a button ‘Next’.                         4
  2. Select Destination Database
    1. In this step provide your Amazon RDS server details and connect it. Once connected select the target database. If you have not created any database earlier, then create a new one using Create Database option and go next
      2
  3. Final Step and Review Target server Response
    1. Once you hit next in above step migration will start and you can review result of migration in this step. You can now connect to RDs database using your SQL Server Management Studio and check all the migrated data.  This tool will save a lot of time.
      6

      You may see below errors in migration report
      StoredProcedure [dbo].[aspnet_Setup_RemoveAllRoleMembers] — sp_helpuser is not supported in current version of Azure SQL DatabaseTo make sure there is no problem in migrated database because of above error I recommend connect to RDS database and make sure Stored Procedure  aspnet_Setup_RemoveAllRoleMembers is there.