c# - È stata rilevata un'impostazione di ASP.NET che non si applica alla modalità di pipeline gestita integrata




iis .net-4.0 (8)

Aggiunta di <validation validateIntegratedModeConfiguration="false"/> indirizza il sintomo, ma non è appropriato per tutte le circostanze. Avendo provato questo problema alcune volte, spero di aiutare gli altri non solo a superare il problema, ma a capirlo. (Che diventa sempre più importante quando IIS 6 sfuma nel mito e nelle voci).

Sfondo:

Questo problema e la confusione che lo circonda sono iniziati con l'introduzione di ASP.NET 2.0 e IIS 7. IIS 6 aveva e continua ad avere una sola modalità pipeline ed è equivalente a ciò che IIS 7+ chiama modalità "classica". La seconda, più recente e consigliata modalità pipeline per tutte le applicazioni in esecuzione su IIS 7+ si chiama modalità "Integrata".

Quindi, qual è la differenza? La differenza principale è come ASP.NET interagisce con IIS.

  • La modalità classica è limitata a una pipeline ASP.NET che non può interagire con la pipeline di IIS. Essenzialmente arriva una richiesta e se IIS 6 / Classic è stato informato, attraverso la configurazione del server, che ASP.NET può gestirlo, IIS consegna la richiesta ad ASP.NET e prosegue. Il significato di questo può essere dedotto da un esempio. Se dovessi autorizzare l'accesso a file immagine statici, non sarei in grado di farlo con un modulo ASP.NET perché la pipeline di IIS 6 gestirà tali richieste e ASP.NET non vedrà mai quelle richieste perché non sono mai state distribuite . * D'altra parte, autorizzare quali utenti possono accedere a una pagina .ASPX come una richiesta per Foo.aspx è banale anche in IIS 6 / Classic perché IIS passa sempre tali richieste alla pipeline ASP.NET. In modalità classica ASP.NET non sa cosa non è stato detto e c'è molto che IIS 6 / Classic potrebbe non dirlo.

  • La modalità integrata è consigliata poiché i gestori ei moduli ASP.NET possono interagire direttamente con la pipeline di IIS. La pipeline di IIS non rilascia più semplicemente la richiesta alla pipeline ASP.NET, ora consente al codice ASP.NET di collegarsi direttamente alla pipeline di IIS e tutte le richieste che lo hanno colpito. Ciò significa che un modulo ASP.NET non può solo osservare richieste di file di immagine statici, ma può intercettare quelle richieste e agire negando l'accesso, registrando la richiesta, ecc.

Superare l'errore:

  1. Se si esegue un'applicazione precedente originariamente costruita per IIS 6, forse è stata spostata su un nuovo server, potrebbe non esserci assolutamente niente di sbagliato nell'esecuzione del pool di applicazioni di tale applicazione in modalità classica. Vai avanti non devi sentirti male.
  2. Poi di nuovo forse stai dando alla tua applicazione un lifting o è stato chugging bene fino a quando non hai installato una libreria di terze parti tramite NuGet, manualmente o con altri mezzi. In tal caso è interamente possibile httpHandlers o httpModules sono stati aggiunti a system.web . Il risultato è l'errore che stai vedendo perché validateIntegratedModeConfiguration true . Ora hai due scelte:

    1. Rimuovere gli elementi httpHandlers e httpModules da system.web . Ci sono un paio di possibili risultati da questo:
      • Tutto funziona bene, un risultato comune;
      • L'applicazione continua a lamentarsi, potrebbe esserci un web.config in una cartella padre da cui si eredita, si consideri anche la pulizia di tale web.config;
      • Ti stanchi di rimuovere httpHandlers e httpModules che i pacchetti NuGet continuano ad aggiungere a system.web , e fai quello che ti serve.
  3. Se queste opzioni non funzionano o sono più problematiche di quelle che valgono, non ti dirò che non puoi impostare validateIntegratedModeConfiguration su false , ma almeno sai cosa stai facendo e perché è importante.

Buone letture:

* Naturalmente ci sono modi per ottenere tutti i tipi di cose strane nella pipeline ASP.NET da IIS 6 / Classic tramite incantesimi come i mapping jolly , se ti piace quel genere di cose.

Ho installato DotNetOpenAuth SDK-3.4.5.10201.vsix e non riesco a farlo funzionare. Funziona localmente (quando corro come localhost) ma quando provo a pubblicare non funziona.

Il messaggio di errore di IIS che ottengo è

Riepilogo errori
Errore HTTP 500.22 - Errore interno del server
È stata rilevata un'impostazione di ASP.NET che non si applica alla modalità di pipeline gestita integrata.

E

Module       ConfigurationValidationModule  
Notification BeginRequest  
Handler      StaticFile  
Error Code   0x80070032  

poi ci sono alcuni suggerimenti su come risolvere il problema:

Cose che puoi provare:

  • Migrare la configurazione nella sezione system.webServer/modules . È possibile farlo manualmente o utilizzando AppCmd ​​dalla riga di comando, ad esempio %SystemRoot%\system32\inetsrv\appcmd migrate config "Default Web Site/" . L'utilizzo di AppCmd per la migrazione dell'applicazione consente di funzionare in modalità integrata e di continuare a lavorare in modalità classica e su versioni precedenti di IIS.

  • Se si è certi che è possibile ignorare questo errore, è possibile disabilitarlo impostando system.webServer/[email protected] su false.

  • In alternativa, passare l'applicazione a un pool di applicazioni in modalità classica, ad esempio %SystemRoot%\system32\inetsrv\appcmd set app "Default Web Site/" /applicationPool:"Classic .NET AppPool" . Fallo solo se non riesci a migrare la tua applicazione.
    (Impostare "Default Web Site" e "Classic .NET AppPool" nel percorso dell'applicazione e nel nome del pool di applicazioni)

Ma il problema è che non ho accesso al server ISS perché non ne sono il proprietario. C'è un modo per risolverlo?


Controlla se c'è qualche conflitto nella tua autenticazione IIS. vale a dire che abiliti l'autenticazione anonima e la rappresentazione di ASP.NET potrebbero causare anche l'errore.


La seconda opzione è quella che desideri.

Nel tuo web.config , assicurati che queste chiavi esistano:

<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

Mi ci sono volute poche ore per risolvere questo problema perché tutte le impostazioni che ho trovato su questo errore erano le stesse ma non funzionava ancora. Il problema era che avevo una cartella nel mio servizio web da cui il file doveva essere inviato al dispositivo WinCE, dopo aver convertito la cartella in un'applicazione con Classic.NetAppPool ha iniziato a funzionare.


Mi sono imbattuto in questo problema ma ho avuto una soluzione diversa. Ha comportato l'aggiornamento del Control Panel>Administrative Tools>IIS Manager e il ripristino della pipeline gestita dal sito della mia app da Integrated a Classic .


Nel mio caso mi mancava la DLL nella cartella bin a cui era fatto riferimento nel file web.config. Quindi controlla se stavi usando qualsiasi impostazione in web.config ma in realtà non hai la DLL.

Grazie


Questo ha funzionato per me:

  1. Elimina il sito creato originariamente.
  2. Ricrea il sito in IIS
  3. Soluzione pulita
  4. Costruisci la soluzione

Sembra che qualcosa sia andato a sud quando ho originariamente creato il sito. Odio soluzioni simili a "Riavvia la tua macchina, quindi reinstalla Windows" senza sapere cosa ha causato l'errore. Ma questo ha funzionato per me. Veloce e semplice. Spero che aiuti qualcun altro.


Se è ancora necessario utilizzare il modulo HTTP, è necessario configurarlo (framework .NET 4.0) come segue:

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
       <add name="MyModule" type="[Namespace].[Class], [assembly]"/>
   </modules>
   <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>




iis-7.5