AI OnAI Off
I do think we have the images, the page's start showing YSOD only after we set the database to readonly.
However, we do a lookup of mapped content and it's contentfolder structure when Loading content. Could that be the reason why all hell breaks loose?
Here's the stacktrace:
[NotSupportedException: Database writes are blocked since the application is set to ReadOnly mode. ReadOnly mode is set either by the 'databaseMode' attribute on the 'episerver.dataStore' section or by the 'episerver:DatabaseMode' setting under the 'appSettings' section.]
EPiServer.Data.Providers.Internal.ReadOnlySqlDatabaseExecutor.ExecuteTransaction(Func`1 action) +62
EPiServer.DataAbstraction.IdentityMappingService.Get(Uri externalIdentifier, Boolean createMissingMapping) +73
XXXX.Web.Business.ZZZZ.ZZZZContentProvider.Convert(ZZZZFolder folder) in C:\projects\XXXX\Web\Business\ZZZZ\ZZZZContentProvider.cs:190
XXXX.Web.Business.ZZZZ.ZZZZContentProvider.LoadContent(ContentReference contentLink, ILanguageSelector languageSelector) in C:\projects\XXXX\Web\Business\ZZZZ\ZZZZContentProvider.cs:55
EPiServer.Core.<>c__DisplayClass127_0.<LoadContentFromCacheOrRepository>b__0() +35
EPiServer.Framework.Cache.ObjectInstanceCacheExtensions.ReadThroughWithWait(IObjectInstanceCache cache, String cacheKey, Func`1 readValue, Func`2 evictionPolicy) +1035
EPiServer.Core.Internal.ContentInstanceCache.ReadThrough(ContentReference contentLink, String selectedLanguage, Func`1 readValue) +107
EPiServer.Core.ContentProvider.LoadContentFromCacheOrRepository(ContentReference contentreference, ILanguageSelector selector) +618
EPiServer.Core.Internal.ProviderPipelineImplementation.GetItem(ContentProvider provider, ContentReference contentLink, LoaderOptions loaderOptions) +327
EPiServer.Core.Internal.DefaultContentLoader.TryGet(ContentReference contentLink, LoaderOptions loaderOptions, T& content) +577
EPiServer.Core.Internal.DefaultContentLoader.Get(ContentReference contentLink, LoaderOptions loaderOptions) +99
XXXX.Web.Business.ZZZZ.ZZZZContentProvider.Convert(ZZZZAsset file, String id, String parent) in C:\projects\XXXX\Web\Business\ZZZZ\ZZZZContentProvider.cs:118
XXXX.Web.Business.ZZZZ.ZZZZContentProvider.LoadContent(ContentReference contentLink, ILanguageSelector languageSelector) in C:\projects\XXXX\Web\Business\ZZZZ\ZZZZContentProvider.cs:63
EPiServer.Core.<>c__DisplayClass127_0.<LoadContentFromCacheOrRepository>b__0() +35
EPiServer.Framework.Cache.ObjectInstanceCacheExtensions.ReadThroughWithWait(IObjectInstanceCache cache, String cacheKey, Func`1 readValue, Func`2 evictionPolicy) +1035
EPiServer.Core.Internal.ContentInstanceCache.ReadThrough(ContentReference contentLink, String selectedLanguage, Func`1 readValue) +107
EPiServer.Core.ContentProvider.LoadContentFromCacheOrRepository(ContentReference contentreference, ILanguageSelector selector) +618
EPiServer.Core.Internal.ProviderPipelineImplementation.GetItem(ContentProvider provider, ContentReference contentLink, LoaderOptions loaderOptions) +327
EPiServer.Core.Internal.DefaultContentLoader.TryGet(ContentReference contentLink, LoaderOptions loaderOptions, T& content) +577
EPiServer.Web.Routing.Internal.DefaultUrlResolver.SelectValidUrlLanguage(ContentReference contentLink, ContextMode contextMode, IContent& content) +189
EPiServer.Web.Routing.Internal.DefaultUrlResolver.GetUrl(ContentReference contentLink, String language, VirtualPathArguments virtualPathArguments) +119
EPiServer.Web.Mvc.Html.UrlExtensions.ContentUrl(UrlHelper urlHelper, ContentReference contentLink) +81
XXXX.Web.Models.Pages.SitePage.CreateContentHighlightItem() in C:\projects\XXXX\Web\Models\Pages\Site\SitePage.cs:145
XXXX.Web.Mvc.PageViewContextFactory.GetSharingImageUrl(SiteStartPage startPage, PageData currentPage) in C:\projects\XXXX\Web\Mvc\PageViewContextFactory.cs:170
XXXX.Web.Mvc.PageViewContextFactory.CreateHKLayoutModel(SiteStartPage siteStartPage, PageData currentContent, IContentLoader contentLoader) in C:\projects\XXXX\Web\Mvc\PageViewContextFactory.cs:224
XXXX.Web.Mvc.PageViewContextFactory.CreateLayoutModel(ContentReference currentPageLink, RequestContext requestContext) in C:\projects\XXXX\Web\Mvc\PageViewContextFactory.cs:110
XXXX.Web.Controllers.SitePageController`1.OnActionExecuted(ActionExecutedContext filterContext) in C:\projects\XXXX\Web\Controllers\Site\SitePageController.cs:49
System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() +95
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.<>c__DisplayClass3_6.<BeginInvokeAction>b__4() +50
System.Web.Mvc.Async.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult) +188
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
System.Web.Mvc.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +52
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +39
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
System.Web.Mvc.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState) +43
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +651
System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +220
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +134
I possibly found a way to circumvent it with getting the full list of available MappedIdentities out with IdentityMappingService's public List property and filtering the correct MappedIdentity from there without doing a lookup in DB. But not sure yet of the impact, need to test :)
Hi, we have a CMS11 solution that uses an external contentprovider trying to show images on certain pages.
We are also trying to get the site to deploy smoothly to DXP but are facing errors on pages with the above mentioned images from content-provider when doing LoadContent and calling IdentityMappingService.Get method when figuring out contentitems parent.
According to my understanding it should be possible to get mappedIdentity without creating missing mapping by simply setting the createMissingMappings to false, however the code ends up in IdentityMappingDB class to this particular method:
And this is where it fails, because our content db is on ReadOnly state when doing a smooth deploy. Are there any known workarounds or best practises for ContentProviders for such scenarios?