2012-10-25 10 views
6

Possiedo un modulo in un'applicazione ASP.NET MVC. Il modulo sta lavorando bene, ma è sparando per ogni tipo di file compresi i contenuti statici, anche se ho:Impossibile interrompere l'attivazione del modulo ASP.NET per il contenuto statico

<modules runAllManagedModulesForAllRequests="false"> 
    <add name="MyModule" .../> 
</modules> 

Il modulo ganci AcquireRequestState e PostRequestHandlerExecute eventi ed entrambi mostrano contenuti statici cottura (.htm, css,. png ecc.).

Ho avuto l'impressione che runAllManagedModulesForAllRequests = "false" dovrebbe impedire ai moduli di attivare il contenuto non-ASP.NET.

per chiarire:

ho posso set preCondition = "managedHandler" come questo:

<add name="MyModule" type="MyApp.MyModule" preCondition="managedHandler" /> 

e ottenere il mio modulo al fuoco richieste solo gestiti.

Tuttavia, sto cercando di capire perché la pipeline di IIS in generale stia generando hit del modulo gestito per ogni richiesta. Penso che questo funzionasse perfettamente nelle versioni precedenti dove a meno che runAllManagedModulesForAllRequests = "true" non stia attivando il contenuto non gestito nei moduli ASP.NET.

In esecuzione su IIS8 su Windows 8 modalità 64 bit, con modalità pipeline integrata.

Aggiornamento:

Dopo qualche ricerca si scopre che delle seguenti condizioni:

  • se runAllManagedModulesForAllRequests = "true" tutti i moduli - a prescindere dalla loro preCondition attributo impostazione fuoco su tutte le richieste . Ciò vale anche per gli eventi Application_XXXX implementare sul HttpApplication
  • runAllManagedModulesForAllRequests = "false" non ha alcun effetto di mantenere richieste non gestiti dai moduli che colpiscono, a meno preCondition = "managedHandler" è impostato
  • runAllManagedModulesForAllRequests = "false" non influisce Application_XXXX eventi, facendo in modo che tali eventi attivino solo le richieste gestite. IOW, Application_XXXX si comporta come se l'attuazione 'modulo' ha avuto una precondizione = "managedHandler"

Per informazioni più dettagliate su questo ho postato un blog: http://www.west-wind.com/weblog/posts/2012/Oct/25/Caveats-with-the-runAllManagedModulesForAllRequests-in-IIS-78

+0

Puoi controllare che StaticFileModule è registrato con i moduli? Dovrebbe puntare a% windir% \ System32 \ inetsrv \ static.dll – pbz

+0

Solo per verificare l'integrità, è possibile aggiornare con la discendenza completa del nodo ? Dovrebbe essere in . Come ho detto, controllo di sanità mentale. :) –

+0

Inoltre, se ricordo correttamente, è necessario preCondition = "managedHandler" per i moduli -> aggiungi – pbz

risposta

7

In IIS7 Microsoft ha introdotto un nuovo modo di sviluppo di moduli e gestori utilizzando codice gestito (.NET), non solo codice nativo. Il problema è il passaggio di una richiesta tra codice gestito e nativo molto costoso, quindi Microsoft ha introdotto lo preCondition="managedHandler". Segnala il modulo come disponibile solo per le richieste di contenuto gestito (.aspx, .asmx, ...) in modo che IIS eviti di attivarlo per il contenuto statico.

Ora, è possibile avere una situazione in cui si desidera modificare una richiesta di contenuto statico, come la minimizzazione di JavaScript al volo. È possibile scrivere il modulo utilizzando C# e compilarlo come modulo gestito, ma si desidera che venga generato per il contenuto statico, quindi non contrassegnarlo come managedHandler.

Infine, runAllManagedModulesForAllRequests="true" viene utilizzato per sovrascrivere preCondition="managedHandler" in modo che vengano tutti attivati.

Non v'è più informazioni disponibili su:
http://www.iis.net/learn/get-started/introduction-to-iis/iis-modules-overview#Precondition

+0

Sam: da quello che ho capito IIS non attiva automaticamente il codice gestito. Ma sospetto che potrebbe essere vero ora - non appena un modulo gestito ANY è in via di sviluppo, forse inizierà a sparare per tutte le richieste. Sono più preoccupato per le prestazioni che per la logica delle cose. Il fatto che il contenuto statico esploda nella pipeline gestita sembrerebbe aggiungere un sovraccarico significativo alle richieste in generale. –

Problemi correlati