2014-11-18 9 views
7

Sto cercando di utilizzare il modulo di inizializzazione dell'applicazione su IIS 8.5 per il riscaldamento delle applicazioni intranet. L'installazione è corretta e il riscaldamento funziona, tuttavia, una volta disabilitata l'autenticazione anonima, l'app non è più precaricata (l'utilizzo della memoria è di soli 20 mb rispetto a circa 200 mb quando l'inizializzazione colpisce il sito).Inizializzazione dell'applicazione IIS 8.5 e autenticazione di Windows

Poiché si tratta di applicazioni intranet che richiedono l'autenticazione, abbiamo sempre abilitato solo l'autenticazione di Windows e l'autenticazione anonima è stata disabilitata.

Sto cercando un modo per mantenere questa configurazione e anche l'inizializzazione dell'applicazione funziona. Ho trovato su this page che IIS sta usando l'AUTORITÀ \ NT \ \ IUSR per la richiesta.

come la vedo io, le mie opzioni sono:

  1. attiva l'autenticazione anonomous.
  2. Modificare l'account utilizzato da IIS per effettuare la richiesta.

Idealmente mi piacerebbe mantenere disabilitata l'autenticazione anonima. Qualcuno sa come posso ottenere questo?

+0

normalmente quando si abilita la priorità autenticazione anonima va a quel ... nella cache problema la storia della memoria potrebbe essere il problema per risolvere questo, provare in questo modo ... disabilitare prima l'autenticazione anonima e abilitare l'autenticazione di Windows, quindi riavviare IIS ma non dal terminale riavviarlo dall'elenco dei servizi. quindi dovrebbe essere reinizializzato se non si riavvia la macchina e controllare ... ******** NOTA **** Suppongo che stai usando un Pool APP corretto ...... – Sandaru

risposta

6

In breve, suggerisco di consentire l'accesso anonimo non SSL a qualcosa come una singola pagina Init.aspx in ciascuna delle tue app. Ho aggiunto una tale pagina alla mia app per questo scopo con la documentazione al suo interno per aiutare i successivi amministratori/sviluppatori a capire come farlo funzionare se dovessero mai spostare il codice su un nuovo server.

Un riferimento in particolare che mi ha aiutato a capire come farlo funzionare era lo reference for the web.config <applicationInitialization> tag.

Ecco la pagina Init.aspx ho aggiunto alla mia applicazione nel caso in cui si desidera utilizzare un derivato di esso:

<%@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. 
+0

Puoi dare un esempio esatto di ciò che l'autorizzazione/autenticazione dovrebbe piacere sia per la pagina che per l'intero sito? Ho provato i tuoi passi ma l'unico modo in cui sono riuscito a farlo funzionare è di lasciare l'autenticazione anonima per l'intero sito. – skeletank

+0

@skeletank: Ci scusiamo per l'occasione. In teoria, l'accesso anonimo dovrebbe funzionare solo per la pagina Init.aspx nello stesso modo in cui l'hai utilizzata per il sito in generale; dovresti essere in grado di fare ciò che ha funzionato per la root del sito solo per il file Init.aspx. Per risolvere questo problema, potrebbe essere utile visitare la pagina Init.aspx e rivedere l''errore dettagliato' di IIS per l'eccezione di sicurezza. A volte i dettagli delle eccezioni ti diranno esattamente che cosa non piace. Per esempio. 'ACL on resource' significa NTFS. "Intestazioni non valide" indica talvolta regole di autorizzazione, ecc. – scradam

+0

+100 per quell'eccellente blocco di commenti. I futuri manutentori devono amarti! –

Problemi correlati