I tried to setup preload on a IIS 8.5 site. All parameters were set correctly, including app pool to "always running" and site/application preload set to enabled via GUI (confirmed in configuration file as well). However, upon testing the preload never worked/occurred as intended (can be easily confirmed just by observing both the site launch time and worker process's private memory utilization after each app pool restart).
Upon further diagnosis I found out that as long as I set my application to be "SSL Required" , which I initially did, the preload would not work. Once this setting was turned off, preload started to work normally. Note that the site's binding setting did
not have any effect on the feature. In other words, the site does not have to have a http binding (mine was set to https only from the start). It's the "SSL Settings" that matters.
Upon looking up online documentation, I found
this article by Wade Hilmo with the following description on the preload feature:
"For any application where preloadEnabled="true", it will build a URL corresponding to the default page for the application and run it through the pipeline. This request does not go through the network, and there is no client listening for a response (IIS discards any data that would have gone to the client.)"
So IIS builds an internal link to preload a site that has preload enabled, and it does not have to go through network (hence the IP/protocol binding of the site does not matter). However, it did not seem to take account into the "SSL Settings" configuration,
and presumably the link was non-SSL by default. As a result, if "Require SSL" were enabled, this internal request would fail, and therefore the preload feature would not work as intended.
I believe this can be considered a bug, and hopefully someone at Microsoft can take a look into it.