This just happened to us again. It's an extremely bad issue. We have no monitors set up to detect issues like this, it's something we have to notice ourselves or by users reporting to us that the website is broken. Last time it happened was 2016-09-09. Now it's 2016-09-15, not even a week passed.
Our web editor belives that this might be related to changing stuff inside commerce manager (SortIndex). Since we did this today and last friday when the issue happened. As before a restart of the site brings the products back. We are currently running EPiServer Commerce 9.21.0 and EPiServer CMS 9.12.0.
Here is how the website looks during the issue:
Here is how it looks inside EPiServer Commerce during the issue (normal):
Here's how the website looks again after a restart of everything:
The products are back! (Don't mind the monkey, it's a personal easter egg because I'm signed in)
This seems to be some kind of caching issue inside EPiServer. I'm guessing it's not caching as hard inside edit-mode and that might be why it's working there. Just like this issue: http://world.episerver.com/forum/developer-forum/Problems-and-bugs/Thread-Container/2016/9/commerce-variantsku-page-stops-working-in-view-mode/
Although for that other issue specific to a particular product not even restarting the site helped. So if that also was a caching issue it must be something you're caching in the database.
Not sure about this, but it looks a bit like the thing discussed in this post http://world.episerver.com/Modules/Forum/Pages/Thread.aspx?id=133442.
I had simular issues where sometimes, for no appearant reason, the catalog didn't return any results anymore. It turned out to be a missing setting on our Commerce admin site. Every time the commerce admin site restarted and the frontend site was restarted at about the same time then the problem occured.
I was able to resolve it with adding the setting 'enableModelSyncCommit="false"' to the commerce web.config as discussed in the post (below the accepted answer).
Good thinking. But before I add any extra settings I spent some more time trying to reproduce the issue on our test server. Which is running EPiServer Commerce 9.22.0 instead of 9.21.0. Unfortunately I was unable to do so, no matter how many times I restarted/recycled the commerce manager. I also tried changing "Sort Order" all over the place in commerce manager but it worked perfectly. Restarting both the manager and CMS site afterwards still did not cause any issues.
This is why I belive it's some kind of internal caching issue that requires traffic on the site in order to occur. Maybe issues only occur during multi-threaded accesses to the caching system. I could be completely wrong though, I would be very happy if the cause was something more easily reproducible.
Unfortunately I cannot do these kind of tests on the production server but I absolutely do not belive this issue started in EPiServer Commerce 9.22.0 since the issue has happened waaay back as well, not just this frequently. Besides there have been no mentions of fixes for this in any released patch-notes.
Related to that other thread though (the EPiServer Commerce manager site trying to load code from the EPiServer.CMS site) we've been having this issue for about a year I think:
(From EPiServer Commerce manager logs)
2016-09-15 13:15:33,055 [1] ERROR EPiServer.Personalization.VisitorGroups.VisitorGroupRole: Unable load criterion of type 'EPiServer.MarketingAutomationIntegration.UI.Plugins.VisitorGroups.Criteria.Database.DatabaseCriterion, EPiServer.MarketingAutomationIntegration'
System.IO.FileNotFoundException: Could not load file or assembly 'EPiServer.MarketingAutomationIntegration' or one of its dependencies. The system cannot find the file specified.
File name: 'EPiServer.MarketingAutomationIntegration'
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
at EPiServer.Data.Dynamic.TypeResolver.<>c__DisplayClass12_1.<ResolveType>b__0(AssemblyName assemblyName)
at System.TypeNameParser.ResolveAssembly(String asmName, Func`2 assemblyResolver, Boolean throwOnError, StackCrawlMark& stackMark)
at System.TypeNameParser.ConstructType(Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
at System.TypeNameParser.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase)
at EPiServer.Data.Dynamic.TypeResolver.ResolveType(String typeName, Boolean throwOnError, FallbackTypeResolver fallbackResolver)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at EPiServer.Personalization.VisitorGroups.VisitorGroupRole.CreateCriterion(VisitorGroupCriterion visitorGroupCriterion)
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
System.IO.FileNotFoundException: Could not load file or assembly 'EPiServer.MarketingAutomationIntegration' or one of its dependencies. The system cannot find the file specified.
File name: 'EPiServer.MarketingAutomationIntegration'
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
at EPiServer.Data.Dynamic.TypeResolver.<>c__DisplayClass12_1.<ResolveType>b__0(AssemblyName assemblyName)
at System.TypeNameParser.ResolveAssembly(String asmName, Func`2 assemblyResolver, Boolean throwOnError, StackCrawlMark& stackMark)
at System.TypeNameParser.ConstructType(Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
at System.TypeNameParser.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase, StackCrawlMark& stackMark)
at System.Type.GetType(String typeName, Func`2 assemblyResolver, Func`4 typeResolver, Boolean throwOnError, Boolean ignoreCase)
at EPiServer.Data.Dynamic.TypeResolver.ResolveType(String typeName, Boolean throwOnError, FallbackTypeResolver fallbackResolver)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at EPiServer.Personalization.VisitorGroups.VisitorGroupRole.CreateCriterion(VisitorGroupCriterion visitorGroupCriterion)
It doesn't really seem to be causing any issues though. But it is trying to load visitor group criterias that we are running on the CMS site. Adding that code to the commerce site as well is not really a good solution. I reported this during a training and was told it was a bug. It's still not solved.
I also had a tough time reproducing the problem locally. Multiple identical restart procedures where often needed to reproduce it.
The reason I found the problem was a change in the 'ContentTypes' table I detected when restarting the Commerce Manager. Restarting the Commerce manager resulting in fewer records in the ContentTypes table. Then when restarting our frontend website, the records came back (but with new pkID's).
This you can easily check in your debug environment, just restart commerce manager and check the number of records before and after the restart. These should be the same.
Thanks a lot Rene!!
I can now confirm that we are loosing almost all the lines in the tblContentType table when the Commerce Manager site restarts without that setting. enableModelSyncCommit="false". I'm assuming EPiServer CMS is caching this table and that the errors only start appearing after the cache is invalidated.
All ModelTypes that inherit from NodeContent, ProductContent or VariationContent are deleted without this setting.
I also took the liberty to install the latest EPiServer Commerce manager (9.22.0) to a blank ASP.net web project and I can confirm that this setting is STILL missing from web.config. Here is what gets installed then:
<episerver>
<applicationSettings httpCacheability="Public" pageValidateTemplate="false" uiShowGlobalizationUserInterface="true" uiUrl="~/EPiServer/CMS/" urlRebaseKind="ToRootRelative" enableScheduler="false"/>
</episerver>
Please fix this issue EPiServer.
Hi,
It's as designed that Commerce Manager should not touch the ModelTypes at all, and enableModelSyncCommit="false" should be present in its web.config.
EDIT: I'll verify and add a bug for this.
Regards,
/Q
Yes but the faulty configuration is being installed to blank/new Commerce manager sites. Surely that is a bug?
Hi guys,
Could you tell me please if this bug was fixed and if it was in what EPiServer version.
I had locally quite similar issue in EPiServer.CMS 10.5.1 / EPiServer.Commerce 10.2.3
The bug was fixed and released in Commercer 9.24.0. Make sure that you have enableModelSyncCommit="false" in your Commerce Manager's web.config (or Episerver.config). Add it and restart frontend (CMS) site should fix the problem. If you already have that, and the bug still happens I'd suggest you to contact our developer support service - it might be something else entirely.
Thank you for a quick reply.
We have had enableModelSyncCommit="false" configured already.
Restart + Running the EpiFind reindexation helps to solve the issue for me locally.
Hello,
We've had an issue occur about 3 times now that is extremely bad. All of a sudden, without any special interaction from us (that we know of at least). Suddenly no children are returned from our commerce catalog root.
This means that on our website: https://www.piab.com/ suddenly the "Products" top-menu becomes completely blank. Unfortunately we have no idea how to recreate this issue, and it has only happened 2-3 times during the last 0.5 year. When logging in to EPiServer during this issue everything looks normal in edit mode. But in view-mode no products are there.
To resolve this we've had to restart the site.