You know that sinking feeling? You know, the one when you check your emails in the morning and you don’t have the usual “Content Deployment Successful” message waiting? What about when you receive a “Content Deployment Failed” message instead? Well, what really ruins my day is when I don’t receive either… That’s when I know I should be expecting something really bad to have occurred.
In some cases this might not be cause for immediate alarm, but in this scenario the content is being published cross-Farm from a staging area to an Internet-facing (DMZ) website. The DMZ Farm is quite simply a single web application on port 8011 that accepts incoming content and has been extended to a web site on port 80 (where the firewall routes Internet traffic).
- Firstly, I logged into Central Administration to check the latest status. Maybe the email just didn’t come through, right? Wrong, the status is showing Preparing
- So let’s check our sites to make sure nothing has broken. A quick check on the staging area reveals the page loading without error. What about the Internet site? Well, the IIS site for the extended web application (port 80) is working, but when trying to access the actual web application on port 8011, we are presented with this:
- The observant among you will have noticed the Source of this error. However, no time to explain but I knew the firewall wasn’t the cause of the problem, just where the problem was manifested. I promptly logged onto the DMZ Farm. For those interested (and for the benefit of search engines) you can see the Event Log message at the bottom of this post
- I set the custom errors to RemoteOnly (see this MSDN article if you need assistance) for the site and attempted to access the web application locally. This time I receive a slightly different message:
- We can see the compat.browser file is causing the error at line zero. The Source Error strikes me as being quite ominous though. I would have expected the file to looks something like this:
- But what the file actually contained was, well nothing at all, it was empty!
- A quick restore via appcmd and we’re on the path to resolution. If you’re not backing up your IIS configuration (you really should be!) you could snatch a copy from either the staging web application or the extended site as this particular file should be the same
- Once the file is restored, I changed the custom errors back to its original setting and a little restart of the web site from IIS
- Right, I’ve ensured the site is back up and running. Now to crack on and fix the Content Deployment. Navigate through Central Administration > Monitoring > Review Job Definitions and track down the one-time job corresponding with the failing Content Deployment task, delete it
- Once that’s done, restart a Full Content Deployment job and you should be sorted
- That’s all there is to it! Kick off a full content deployment activity and normality is restored
Event Log excerpt:
Event code: 3006 Event message: A parser error has occurred. Event time: [SANITISED_FOR_BLOG] Event time (UTC): [SANITISED_FOR_BLOG] Event ID: a8d9ab9e9df046ac91a45e5cfbcda9e7 Event sequence: 3 Event occurrence: 1 Event detail code: 0 Application information: Application domain: /LM/W3SVC/283510792/ROOT-6-130053985124803644 Trust level: WSS_Medium Application Virtual Path: / Application Path: C:inetpubwwwrootwssVirtualDirectories8011 Machine name: [SANITISED_FOR_BLOG]
Process information: Process ID: 6980 Process name: w3wp.exe Account name: [SANITISED_FOR_BLOG]
Exception information: Exception type: HttpException Exception message: Root element is missing.
Request information: Request URL: http://[SANITISED_FOR_BLOG]:8011/ Request path: / User host address: ::1 User: Is authenticated: False Authentication Type: Thread account name: [SANITISED_FOR_BLOG]
Thread information: Thread ID: 36 Thread account name: [SANITISED_FOR_BLOG] Is impersonating: False Stack trace: at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException() at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters)
Custom event details: