Wednesday 19 March 2014

Umbraco fails to Publish! We get an exception within a load balanced environment.

After a deployment to our live servers which are load balanced we could not Publish. We could Save but not right-click publish or by clicking on the icon.

This was the error:

ERROR Umbraco.Web.UmbracoApplication - [Thread 36] An unhandled exception occurred
System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.TypeInitializationException: The type initializer for 'umbraco.presentation.cache.dispatcher' threw an exception. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at umbraco.presentation.cache.dispatcher..cctor()
   --- End of inner exception stack trace ---
   at umbraco.presentation.cache.dispatcher.Refresh(Guid factoryGuid, Int32 Id)
   at umbraco.library.UpdateDocumentCache(Document doc)
   at umbraco.cms.presentation.editContent.Publish(Object sender, EventArgs e)
   at System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e)
   at System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

This seemed to be an error with the distributed call from server 1 to server 2 in the load balancer.

  1. First I thought it might be a rewrite rule in \config\UrlRewriting.config - it wasn't
  2. Then I recycled the app pools - this didn't help
  3. I then made sure I could access the Umbraco web service on both servers:
    1. http://serverip1/umbraco/webservices/CacheRefresher.asmx - worked
    2. http://serverip2/umbraco/webservices/CacheRefresher.asmx - worked
  4. I disabled distributed calls and then Publish worked, but this wasn't a solution
  5. Finally the solution was due to incorrect config in \config\umbracoSettings.config. I somehow didn't have the <user>0</usertag:

<distributedCall enable="true">

No comments: