Showing posts with label distributed call. Show all posts
Showing posts with label distributed call. Show all posts

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">