Umbraco 7 scheduled publishing problems in Azure App Service
Hello Wonderful Umbraco community!
We have an Umbraco 7.15.7 project that we are attempting to put onto an Azure app service as it has about 1 year of life left, before we rebuild on version 10 or possibly 11 :-)!
So far, setting up the infrastructure in DevOps has gone well. We have a pipeline/CI working and the site has tested all the way through with little trouble. We've even managed to plug-in Azure AD SSO successfully.
As part of our QA and integration test cycles we've settled on a single instance of P3V3. We may scale up/down, but we have no plans to scale out. So this isn't a load balanced set-up.
Examine sync services and blob storage/image processor are working fine.
The site runs a few plug-ins worth a mention that may cause issue on Azure. Namely:
God Mode
Unversion
Nexu
ModelsBuilder (built-in)
Diplo.LinkChecker
The only bump in the road we're now experiencing is Scheduled Publishing seems to be very unstable. On a first scheduled publish, it works fine. On the second subsequent scheduled publish (same page) the back office becomes unstable (nobody can publish any pages, we just get an endless spinning circle) , the second scheduled change doesn't show up on the website, but the back office UI suggests it has. The only way to clear the problem is to reset the app pool.
Warns & Errors in the log consist of a single consistent error we get with Nexu, which happens on our current production box anyway.
ERROR Our.Umbraco.Nexu.Core.BootStrapper - An unhandled exception occurred while parsing content
System.NullReferenceException: Object reference not set to an instance of an object.
With these Warns & Errors only happening on the Azure app service. They don't always consistently appear though every time.
2022-08-02 16:53:57,440 [P1508/D32/T205] ERROR Umbraco.Web.Scheduling.ScheduledPublishing - Failed (see exception).
System.NullReferenceException: Object reference not set to an instance of an object.
at Umbraco.Core.Scoping.Scope.<>cDisplayClass700.2()
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.RobustExit(Boolean completed, Boolean onException)
at Umbraco.Core.Scoping.Scope.Dispose()
at Umbraco.Core.Persistence.UnitOfWork.ScopeUnitOfWork.DisposeResources()
at Umbraco.Core.DisposableObjectSlim.Dispose(Boolean disposing)
at Umbraco.Core.DisposableObjectSlim.Dispose()
at Umbraco.Core.Services.UserService.GetUserById(Int32 id)
at umbraco.BusinessLogic.User.GetUser(Int32 id)
at umbraco.cms.businesslogic.web.Document.SetupNode(IContent content)
at Umbraco.Web.Cache.PageCacheRefresher.Refresh(IContent instance)
at Umbraco.Core.Sync.ServerMessengerBase.DeliverLocal[T](ICacheRefresher refresher, MessageType messageType, Func2 getId, IEnumerable1 instances)
at Umbraco.Core.Sync.ServerMessengerBase.Deliver[T](IEnumerable1 servers, ICacheRefresher refresher, MessageType messageType, Func2 getId, IEnumerable1 instances)
at Umbraco.Web.Cache.DistributedCache.Refresh[T](Guid factoryGuid, Func2 getNumericId, T[] instances)
at Umbraco.Web.Cache.DistributedCacheExtensions.RefreshPageCache(DistributedCache dc, IContent[] content)
at Umbraco.Web.Cache.CacheRefresherEventHandler.ContentServicePublished(IPublishingStrategy sender, PublishEventArgs1 e)
at Umbraco.Core.Events.TypedEventHandler2.Invoke(TSender sender, TEventArgs e)
at Umbraco.Core.Events.EventDefinition`2.RaiseEvent()
at Umbraco.Core.Events.ScopeEventDispatcher.ScopeExitCompleted()
at Umbraco.Core.Events.ScopeEventDispatcherBase.ScopeExit(Boolean completed)
at Umbraco.Core.Scoping.Scope.<>cDisplayClass70_0.1()
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.RobustExit(Boolean completed, Boolean onException)
at Umbraco.Core.Scoping.Scope.Dispose()
at Umbraco.Core.Persistence.UnitOfWork.ScopeUnitOfWork.DisposeResources()
at Umbraco.Core.DisposableObjectSlim.Dispose(Boolean disposing)
at Umbraco.Core.DisposableObjectSlim.Dispose()
at Umbraco.Core.Services.ContentService.SaveAndPublishDo(IContent content, Int32 userId, Boolean raiseEvents)
at Umbraco.Core.Publishing.ScheduledPublisher.CheckPendingAndProcess()
at Umbraco.Web.Scheduling.ScheduledPublishing.PerformRun()
System.NullReferenceException: Object reference not set to an instance of an object.
at Umbraco.Core.Scoping.Scope.<>cDisplayClass700.2()
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.RobustExit(Boolean completed, Boolean onException)
at Umbraco.Core.Scoping.Scope.Dispose()
at Umbraco.Core.Persistence.UnitOfWork.ScopeUnitOfWork.DisposeResources()
at Umbraco.Core.DisposableObjectSlim.Dispose(Boolean disposing)
at Umbraco.Core.DisposableObjectSlim.Dispose()
at Umbraco.Core.Services.UserService.GetUserById(Int32 id)
at umbraco.BusinessLogic.User.GetUser(Int32 id)
at umbraco.cms.businesslogic.web.Document.SetupNode(IContent content)
at Umbraco.Web.Cache.PageCacheRefresher.Refresh(IContent instance)
at Umbraco.Core.Sync.ServerMessengerBase.DeliverLocal[T](ICacheRefresher refresher, MessageType messageType, Func2 getId, IEnumerable1 instances)
at Umbraco.Core.Sync.ServerMessengerBase.Deliver[T](IEnumerable1 servers, ICacheRefresher refresher, MessageType messageType, Func2 getId, IEnumerable1 instances)
at Umbraco.Web.Cache.DistributedCache.Refresh[T](Guid factoryGuid, Func2 getNumericId, T[] instances)
at Umbraco.Web.Cache.DistributedCacheExtensions.RefreshPageCache(DistributedCache dc, IContent[] content)
at Umbraco.Web.Cache.CacheRefresherEventHandler.ContentServicePublished(IPublishingStrategy sender, PublishEventArgs1 e)
at Umbraco.Core.Events.TypedEventHandler2.Invoke(TSender sender, TEventArgs e)
at Umbraco.Core.Events.EventDefinition`2.RaiseEvent()
at Umbraco.Core.Events.ScopeEventDispatcher.ScopeExitCompleted()
at Umbraco.Core.Events.ScopeEventDispatcherBase.ScopeExit(Boolean completed)
at Umbraco.Core.Scoping.Scope.<>cDisplayClass70_0.1()
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions)
at Umbraco.Core.Scoping.Scope.RobustExit(Boolean completed, Boolean onException)
at Umbraco.Core.Scoping.Scope.Dispose()
at Umbraco.Core.Persistence.UnitOfWork.ScopeUnitOfWork.DisposeResources()
at Umbraco.Core.DisposableObjectSlim.Dispose(Boolean disposing)
at Umbraco.Core.DisposableObjectSlim.Dispose()
at Umbraco.Core.Services.ContentService.SaveAndPublishDo(IContent content, Int32 userId, Boolean raiseEvents)
at Umbraco.Core.Publishing.ScheduledPublisher.CheckPendingAndProcess()
Umbraco 7 scheduled publishing problems in Azure App Service
Hello Wonderful Umbraco community!
We have an Umbraco 7.15.7 project that we are attempting to put onto an Azure app service as it has about 1 year of life left, before we rebuild on version 10 or possibly 11 :-)!
So far, setting up the infrastructure in DevOps has gone well. We have a pipeline/CI working and the site has tested all the way through with little trouble. We've even managed to plug-in Azure AD SSO successfully.
As part of our QA and integration test cycles we've settled on a single instance of P3V3. We may scale up/down, but we have no plans to scale out. So this isn't a load balanced set-up.
Examine sync services and blob storage/image processor are working fine.
The site runs a few plug-ins worth a mention that may cause issue on Azure. Namely:
God Mode Unversion Nexu ModelsBuilder (built-in) Diplo.LinkChecker
The only bump in the road we're now experiencing is Scheduled Publishing seems to be very unstable. On a first scheduled publish, it works fine. On the second subsequent scheduled publish (same page) the back office becomes unstable (nobody can publish any pages, we just get an endless spinning circle) , the second scheduled change doesn't show up on the website, but the back office UI suggests it has. The only way to clear the problem is to reset the app pool.
Warns & Errors in the log consist of a single consistent error we get with Nexu, which happens on our current production box anyway.
System.NullReferenceException: Object reference not set to an instance of an object.
With these Warns & Errors only happening on the Azure app service. They don't always consistently appear though every time.
2022-08-02 17:15:10,683 [P1508/D35/T383] WARN Umbraco.Core.Scoping.ScopeProvider - Missed ScopeContext Object 05f96a5a 2022-08-02 17:15:10,683 [P1508/D35/T383] WARN Umbraco.Core.Scoping.ScopeProvider - Missed ScopeContext Object 05f96a5a
System.NullReferenceException: Object reference not set to an instance of an object. at Umbraco.Core.Scoping.Scope.<>cDisplayClass700.2() at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.RobustExit(Boolean completed, Boolean onException) at Umbraco.Core.Scoping.Scope.Dispose() at Umbraco.Core.Persistence.UnitOfWork.ScopeUnitOfWork.DisposeResources() at Umbraco.Core.DisposableObjectSlim.Dispose(Boolean disposing) at Umbraco.Core.DisposableObjectSlim.Dispose() at Umbraco.Core.Services.UserService.GetUserById(Int32 id) at umbraco.BusinessLogic.User.GetUser(Int32 id) at umbraco.cms.businesslogic.web.Document.SetupNode(IContent content) at Umbraco.Web.Cache.PageCacheRefresher.Refresh(IContent instance) at Umbraco.Core.Sync.ServerMessengerBase.DeliverLocal[T](ICacheRefresher refresher, MessageType messageType, Func
2 getId, IEnumerable
1 instances) at Umbraco.Core.Sync.ServerMessengerBase.Deliver[T](IEnumerable1 servers, ICacheRefresher refresher, MessageType messageType, Func
2 getId, IEnumerable1 instances) at Umbraco.Web.Cache.DistributedCache.Refresh[T](Guid factoryGuid, Func
2 getNumericId, T[] instances) at Umbraco.Web.Cache.DistributedCacheExtensions.RefreshPageCache(DistributedCache dc, IContent[] content) at Umbraco.Web.Cache.CacheRefresherEventHandler.ContentServicePublished(IPublishingStrategy sender, PublishEventArgs1 e) at Umbraco.Core.Events.TypedEventHandler
2.Invoke(TSender sender, TEventArgs e) at Umbraco.Core.Events.EventDefinition`2.RaiseEvent() at Umbraco.Core.Events.ScopeEventDispatcher.ScopeExitCompleted() at Umbraco.Core.Events.ScopeEventDispatcherBase.ScopeExit(Boolean completed) at Umbraco.Core.Scoping.Scope.<>cDisplayClass70_0.1() at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.RobustExit(Boolean completed, Boolean onException) at Umbraco.Core.Scoping.Scope.Dispose() at Umbraco.Core.Persistence.UnitOfWork.ScopeUnitOfWork.DisposeResources() at Umbraco.Core.DisposableObjectSlim.Dispose(Boolean disposing) at Umbraco.Core.DisposableObjectSlim.Dispose() at Umbraco.Core.Services.ContentService.SaveAndPublishDo(IContent content, Int32 userId, Boolean raiseEvents) at Umbraco.Core.Publishing.ScheduledPublisher.CheckPendingAndProcess() at Umbraco.Web.Scheduling.ScheduledPublishing.PerformRun()System.NullReferenceException: Object reference not set to an instance of an object. at Umbraco.Core.Scoping.Scope.<>cDisplayClass700.2() at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.RobustExit(Boolean completed, Boolean onException) at Umbraco.Core.Scoping.Scope.Dispose() at Umbraco.Core.Persistence.UnitOfWork.ScopeUnitOfWork.DisposeResources() at Umbraco.Core.DisposableObjectSlim.Dispose(Boolean disposing) at Umbraco.Core.DisposableObjectSlim.Dispose() at Umbraco.Core.Services.UserService.GetUserById(Int32 id) at umbraco.BusinessLogic.User.GetUser(Int32 id) at umbraco.cms.businesslogic.web.Document.SetupNode(IContent content) at Umbraco.Web.Cache.PageCacheRefresher.Refresh(IContent instance) at Umbraco.Core.Sync.ServerMessengerBase.DeliverLocal[T](ICacheRefresher refresher, MessageType messageType, Func
2 getId, IEnumerable
1 instances) at Umbraco.Core.Sync.ServerMessengerBase.Deliver[T](IEnumerable1 servers, ICacheRefresher refresher, MessageType messageType, Func
2 getId, IEnumerable1 instances) at Umbraco.Web.Cache.DistributedCache.Refresh[T](Guid factoryGuid, Func
2 getNumericId, T[] instances) at Umbraco.Web.Cache.DistributedCacheExtensions.RefreshPageCache(DistributedCache dc, IContent[] content) at Umbraco.Web.Cache.CacheRefresherEventHandler.ContentServicePublished(IPublishingStrategy sender, PublishEventArgs1 e) at Umbraco.Core.Events.TypedEventHandler
2.Invoke(TSender sender, TEventArgs e) at Umbraco.Core.Events.EventDefinition`2.RaiseEvent() at Umbraco.Core.Events.ScopeEventDispatcher.ScopeExitCompleted() at Umbraco.Core.Events.ScopeEventDispatcherBase.ScopeExit(Boolean completed) at Umbraco.Core.Scoping.Scope.<>cDisplayClass70_0.1() at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.TryFinally(Int32 index, Action[] actions) at Umbraco.Core.Scoping.Scope.RobustExit(Boolean completed, Boolean onException) at Umbraco.Core.Scoping.Scope.Dispose() at Umbraco.Core.Persistence.UnitOfWork.ScopeUnitOfWork.DisposeResources() at Umbraco.Core.DisposableObjectSlim.Dispose(Boolean disposing) at Umbraco.Core.DisposableObjectSlim.Dispose() at Umbraco.Core.Services.ContentService.SaveAndPublishDo(IContent content, Int32 userId, Boolean raiseEvents) at Umbraco.Core.Publishing.ScheduledPublisher.CheckPendingAndProcess()is working on a reply...