Consider following scenario:
You just installed a SharePoint 2010 / 2013 / 2016 multi server environment. All from scratch. A shiny new farm.
On this multi server farm you created certain types of machines (WFE servers, APP servers, and so on) that run role specific services. Everything is good so far, you are happy with the installation work you have done.
Until the moment you notice, that the farms Health Analyzer is complaining about missing server side dependencies.
You find a notification, that comes up with something like this:
Missing server side dependencies.
Severity: 1 - Error
Explanation: [MissingWebPart] WebPart class [baf5274e-a800-8dc3-96d0-0003d9405663] is referenced  times in the database [NAME-OF-CENTRAL-ADMIN-CONTENT-DB], but is not installed on the current farm. Please install any feature/solution which contains this web part. One or more web parts are referenced in the database [NAME-OF-CENTRAL-ADMIN-CONTENT-DB], but are not installed on the current farm. Please install any feature or solution which contains these web parts.
Looks messy. "How could this happen?", you might ask. "I followed all best practices, used AutoSPInstaller. There are no third party tools installed on your farm and there was no content migrated from other farms."
But still: You can't find an explanation for this behaviour. Weird.
Why is this happening?
Let me sum it up: This is a behavior, that can be found in multi server setups, that contain different types of server roles.
All servers in a SharePoint farm run the SharePoint Timer Service. This service makes all farm servers (no matter which role they have) randomly pick timer jobs out of a pool of jobs that are due to be executed. Health Analyzer jobs are triggered by those kind of timer jobs.
Unfortunately, the Health Analyzer rule responsible for checking missing server side dependencies is only checking resources on the particular machine the timer job is executed on. And this somehow is by design. If one of your APP servers is in charge of running the timer job, the result is going to be: local IIS ressources, that are expected on the machine, are missing. The Health Analyzer rule found those references within the content databases and tries to find them on the machine. Unsuccesfully.
If the same Health Analyzer rule is executed by your WFE server, you’ll get a totally different result.
If all your servers run the same services or if you have a single SharePoint server farm, you are not affected by this behaviour.
Check following images (click to enlarge) that explain this behaviour
Carefully compare the Health Analyzer rule check result for each type of server role.
- Health check result on web front end server:
- Health check result on server running the Central Administration:
- Health check result on application server:
Carefully review, understand and discuss following possible workarounds:
- Provision Central Administration and all content Web Applications on all farm servers
- Duplicate virtual directories of Central Administration and all content Web Applications onto servers, that do not run Central Admin or content Web Applications
- Ignore the Health Analyzer error
- Disable the “Missing Server Side Dependencies” rule definition
References / Further Information
There are some really good blog articles, refering to this issue that has been around for years now. My US colleagues Craig Campbell and Allen Wang get into detail in earlier MSDN Blog articles:
- Craig Campbell on MSDN
A behind-the-scenes look at MissingWebPart errors from the "Missing server side dependencies" health analyzer rule
- Allen Wang on MSDN
SharePoint 2010: Missing Server Side Dependencies