Инициализация приложений IIS 8.5 и проверка подлинности Windows

Я пытаюсь использовать модуль инициализации приложения в IIS 8.5 для разогрева приложений интрасети. Настройка правильная, и прогрев работает, однако, как только я отключу анонимную аутентификацию, приложение больше не будет предварительно загружено (использование памяти составляет всего 20 Мб против около 200 Мб при инициализации на сайте).

поскольку это приложения интрасети, требующие проверки подлинности, мы традиционно всегда включали только проверку подлинности Windows и сохраняли анонимную проверку подлинности нетрудоспособный.

Я ищу способ сохранить эту настройку, а также иметь работу инициализации приложения. Я нашел на на этой странице что IIS использует НТОРГАН ЗАПИСИ IUSR для запроса.

Как я вижу, мои варианты:

  1. включить проверку подлинности anonomous.
  2. изменение учетной записи, используемой IIS для выполнения запроса.

В идеале я хотел бы сохранить автономную аутентификацию отключенной. Делает кто-нибудь знает как я могу достичь этого?

1 ответов


в двух словах, я предлагаю разрешить не-SSL, анонимный доступ к чему-то вроде один Init.aspx-страницы в каждом из ваших приложений. Я добавил такую страницу в свое приложение для этой цели с документацией, чтобы помочь последующим администраторам / разработчикам понять, как заставить его работать, если им когда-либо придется переместить код на новый сервер.

одна ссылка, в частности, которая помогла мне понять, как заставить ее работать, была ссылка на веб.config <applicationInitialization> tag.

вот Init.страница aspx, которую я добавил в свое приложение, если вы хотите использовать ее производную:

<%@Page ContentType="text/plain" Language="C#" EnableSessionState="False" EnableViewState="false" AutoEventWireup="false" EnableTheming="false" StylesheetTheme="" Theme="" %>
<%--

The built-in application initialization/preload feature can help in situations where the application takes a while to 
start and/or in situations where some components of the site run as services (e.g. performing scheduled tasks).  This 
feature will make sure that the site is quick when the first user visits the site after a restart and/or will ensure that 
scheduled processes are up and running regardless of when people use the site.

Requirements/procedure for application initialization/preload:
(The procedure is slightly different in versions of IIS before 8.5 because there are no UI options.  Must instead alter
applicationHost.config.  See additional reading for more info.)

1.  Set the app pool for the application to "AlwaysRunning" :
    (IIS Manager > Application Pools > YourAppPoolHere > Advanced Settings... > Start Mode)

2.  Enable Preload: (IIS Manager > Sites> YourSiteOrAppHere > Advanced Settings... > Preload Enabled)

3.  Set initialization properties in the web.config.  e.g.:
      <applicationInitialization doAppInitAfterRestart="true">
        <add initializationPage="/PathToYourApp/Init.aspx" hostName="YourWebsiteNameHere.com" />
      </applicationInitialization>
    See this reference for more info (which can be very important):
    http://www.iis.net/configreference/system.webserver/applicationinitialization

4.  Make the Init.aspx page accessible via HTTP with Anonymous access (which may entail one or more of the following).
      - Set NTFS Permissions on the file to include the IUSR (or Everyone) security principal.
      - Adjust the Authentication, Authorization Rules, IP Address Restrictions, SSL Settings, and any other restrictions 
        for *only* the Init.aspx page:
          4.1  IIS Manager > Sites > YourSiteOrAppHere 
          4.2  Switch from 'Features View' to 'Content View' 
          4.3  Find this Init.aspx page in the right pane and highlight it 
          4.4  Switch back from 'Content View' to 'Features View' once the Init.aspx page is selected.
          4.5  You should now see Init.aspx in the tree view in the left pane.  You can now adjust the access restrictions 
               on just this page (e.g. disable SSL, enable anonymous, etc.)
               Some stuff like this might be in your config:
                 <location path="Init.aspx"><system.webServer><security><authorization>
                   <add accessType="Allow" users="?" />
                 </authorization></security></system.webServer></location>

Additional Reading:

  Some decent guides on installing and enabling Application Initialization:
  http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-application-initialization
  http://weblog.west-wind.com/posts/2013/Oct/02/Use-IIS-Application-Initialization-for-keeping-ASPNET-Apps-alive

  The reference for the init parameters:
  http://www.iis.net/configreference/system.webserver/applicationinitialization

-----------------------------------------------------

Note that by the time the code gets to this page, the code in your Global.asax Application_Start and/or any 
Application_Start HTTP Modules will already have fired, so you may not have any extra work to do here.  This page could 
simply be a dummy page.

TO DO: Add any extra initialization tasks outside of the comment section here if you really want to. e.g.:
<%
MyAppNameSpace.UtilityClass.DoExpensiveStartupRoutine();
%>

//.. and last, just write some dummy text if you ever want to see this page in a browser:
--%>
Application Initialized.