November Happy Hour will be moved to Thursday December 5th.

Ha Bui
Oct 1, 2019
  3440
(3 votes)

Get rid of EPiServer Commerce Migrate redirect loop

Phew! Take 2 hours to get rids of the infinitive loop from EPiServer ECommerce after upgrade from 9.2 to 12.17!

You can Google search with: episerver commerce migration loop

Then some guys below appear:

1. https://world.episerver.com/forum/developer-forum/Episerver-Commerce/Thread-Container/2019/5/passing-thru-episervercommercemigrate-when-created-new-site-in-azure/

2. https://world.episerver.com/forum/developer-forum/Episerver-Commerce/Thread-Container/2016/10/too-many-redirects-error-in-the-browser-after-package-update/

Some good instructions but does not work for my case: MigrateRedirect -> <RequireLogin> -> Owin -> MigrateRedirect -> <RequireLogin> -> ...

You can see more in those class:

EPiServer.Commerce.Internal.Migration.MigrationInitializationModule

EPiServer.Commerce.Internal.Migration.MigrationManager

...

Okay, so how can we resolve this? Some angeles below will help:

1.  // EPiServer.Commerce.Internal.Migration.MigrationManager

public virtual void MigrateAsync()

2. IoC with StructureMap and Interceptors holy light

[InitializableModule]
[ModuleDependency(typeof(EPiServer.Commerce.Initialization.InitializationModule))]
[ModuleDependency(typeof(CmsCoreInitialization))]
internal class ContainerInitialization : IConfigurableModule, IInitializableModule

and

public void ConfigureContainer(ServiceConfigurationContext context)
{
    ...
    context.ConfigurationComplete += (o, e) =>
            {
                e.Services.Intercept<MigrationManager>((locator, defaultMigrationManager) =>
                    new MigrationManagerInterceptor(defaultMigrationManager
                            , locator.GetInstance<MigrationStore>()
                            , locator.GetInstance<MigrateActionUrlResolver>()));
            };
}

and last one:

public class MigrationManagerInterceptor : MigrationManager
    {
        private MigrationManager _defaultMigrationManager;

        public MigrationManagerInterceptor(
            MigrationManager defaultMigrationManager
            , MigrationStore migrationStore
            , MigrateActionUrlResolver migrateActionUrlResolver)
            : base(migrationStore, migrateActionUrlResolver)
        {
            _defaultMigrationManager = defaultMigrationManager;
        }

        public override void RedirectToMigrationView()
        {
            MigrateAsync();
            return;
        }
    }

Good bye redirect loop! Cheer!

// Ha Bui

Oct 01, 2019

Comments

Luc Gosso (MVP)
Luc Gosso (MVP) Oct 1, 2019 07:37 AM

Thank you for sharing, ive been struggling with this for years! 

Your solution is probably the best in history... 

My work arounds was "Log in as webadmin" before you release - not always possible

Or change in Appsetting: AutoMigrateEPiServer set to true use to work - but i know, not always applicable

Ha Bui
Ha Bui Oct 2, 2019 08:00 AM

Thank @GOSSO for your very constructive comment! I also tried some solutions as your but issue still there (sometime it works, weird)

Thank @Quan for your recap / overview solution! I also agree with you about documentation that should be better because of upgrading is very high risky, if we have not then how can motivate partner / customer upgrade to newer version?

// Ha Bui

Please login to comment.
Latest blogs
Optimizely SaaS CMS + Coveo Search Page

Short on time but need a listing feature with filters, pagination, and sorting? Create a fully functional Coveo-powered search page driven by data...

Damian Smutek | Nov 21, 2024 | Syndicated blog

Optimizely SaaS CMS DAM Picker (Interim)

Simplify your Optimizely SaaS CMS workflow with the Interim DAM Picker Chrome extension. Seamlessly integrate your DAM system, streamlining asset...

Andy Blyth | Nov 21, 2024 | Syndicated blog

Optimizely CMS Roadmap

Explore Optimizely CMS's latest roadmap, packed with developer-focused updates. From SaaS speed to Visual Builder enhancements, developer tooling...

Andy Blyth | Nov 21, 2024 | Syndicated blog

Set Default Culture in Optimizely CMS 12

Take control over culture-specific operations like date and time formatting.

Tomas Hensrud Gulla | Nov 15, 2024 | Syndicated blog

I'm running Optimizely CMS on .NET 9!

It works 🎉

Tomas Hensrud Gulla | Nov 12, 2024 | Syndicated blog

Recraft's image generation with AI-Assistant for Optimizely

Recraft V3 model is outperforming all other models in the image generation space and we are happy to share: Recraft's new model is now available fo...

Luc Gosso (MVP) | Nov 8, 2024 | Syndicated blog