2012-09-19 10 views
50

Chiaramente mi manca qualcosa, non sono in grado di distribuire una semplice applicazione ASP.NET MVC 4, .NET 4.5 su Windows Small Business Server 2008 in IIS 7.ASP.NET 4.5 MVC 4 non funziona su Windows Server 2008 IIS 7

.NET framework 4.5 è installato.

Dovrei dovrei vedere quella versione (4.5) nelle impostazioni di base dell'applicazione Pool dell'applicazione? In questo momento, ho solo 2.0 e 4.0, dal momento che 4.5 è come il 3.5 che aggiunge solo sopra il framework 4.0, immagino sia normale.

Quando si naviga in home page, ho ricevuto il seguente errore:

403 - Accesso negato: Accesso negato. Non si dispone dell'autorizzazione per visualizzare questa directory o pagina utilizzando le credenziali fornite.

Quando richiedo l'unico controller denominato Pagina/pagina/indice ottengo la pagina 404 non trovata. Come il processo ASP.NET non ottiene mai la richiesta http.

Posso richiedere una semplice pagina HTML.

Il pool di applicazioni è impostato su .NET 4.0 e integrato come modalità di pipeline gestita.

NETWORK SERVICE ha accesso in lettura/scrittura alla directory.

L'app funziona perfettamente da VS2012, naturalmente.

Non ho idea di cosa non ci sia, e le query sui motori di ricerca non aiutano molto.

Qualcuno avrebbe un suggerimento, che sarebbe estremamente apprezzato. Grazie

Modifica

le DLL sono già sulla cartella bin come System.Web.Mvc, System.Web.Razor ecc

ho creato una pagina vuota Test.aspx per assicurarsi il processo di lavoro di asp.net stava ricevendo la richiesta e sì la pagina era OK. Sembra quindi che il routing MVC non funzioni, sebbene l'app Web ASP.NET MVC 3 funzioni correttamente su quel server.

Dopo l'installazione di .NET 4.5 ho fatto un aspnet_regiis -iru nel caso, che ha aggiunto una cartella aspnet_client nell'app, ma ancora questo non risolve il problema.

L'autenticazione anonima è attiva nella sezione Autenticazione IIS e l'autorizzazione di autorizzazione consente a tutti gli utenti.

ASP.NET MVC 4 è installato, ho appena fatto una riparazione per essere sicuro.

Anche se ASP.NET MVC 4 è installato, l'errore 404 dalla richiesta dell'azione/page/index viene restituito dall'IIS standard e non dall'errore standard di aspnet. Quindi, in effetti, sembra che il framework MVC 4 non sia installato correttamente, semplicemente riesco a ricontrollare e fare una riparazione. Dove posso continuare a indagare?

@Mystere Man, ho modificato l'autenticazione anonima per utilizzare l'identità del pool di applicazioni, interrompere, avviare l'app e ancora lo stesso errore. Sembra davvero che ASP.NET MVC 4 non stia accettando la richiesta.

Ecco una parte del web.config:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    </entityFramework> 

Modifica 2012/09/27

ho riparazione di Microsoft .NET Framework 4.5 e riparare l'ASP.NET MVC 4 , distribuire nuovamente la semplice app ASP.NET MVC 4 e ho ancora lo stesso comportamento. Non sono sicuro di cosa fare dopo, quindi ho iniziato una ricompensa nella speranza che qualcuno potesse aiutarmi a trovare il problema.

Modifica 2014/01/31

Quando ho chiesto a questa domanda, ho segnalato le runAllManagedModulesForAllRequests come la risposta accettata, perché ha risolto il problema. Ma di sicuro non l'avrei usato in produzione. Chiedo perché ho dovuto fare questo e non ho avuto alcuna risposta.

Rispondere alla Martin Hollingsworth risposta era davvero quello che stavo cercando, un buon modo per risolvere questo problema senza tutti i problemi di prestazioni relativi al runAllManagedModulesForAllRequests.

Abbiamo quasi rinunciato e acquistato un nuovo server Windows 2012 (da cui l'applicazione ASP.NET MVC funziona così com'è). Dopo aver provato la soluzione di Martin, il server Windows 2008 ha funzionato.

+0

Potrebbe confermare che il pool di applicazioni è in esecuzione con l'account SERVIZIO DI RETE? –

+0

Sì, il pool di applicazioni utilizza l'account NetworkService (dall'elenco a discesa integrato) –

+0

L'autenticazione anonima è abilitata (o qualsiasi altra autenticazione si prevede di utilizzare)? –

risposta

41

Se siete non in grado di applicare la QFE from kb 980368, invece di utilizzare i runAllManagedModulesForAllRequests soluzione come suggerito nella accettato il answer, è necessario utilizzare la configurazione dei moduli con preCondition = "" mostrato di seguito per evitare il negativo impatto sui contenuti statici come descritto nei post del blog How asp.NET MVC Routing Works and its Impact on the Performance of Static Requests e Don't use runAllManagedModulesForAllRequests="true" when getting your MVC routing to work e alcuni dei commenti sulle risposte.

Scott Hanselman's blog post about runAllManagedModulesForAllRequests dovrebbe aggiungere un po 'di peso a questo argomento. Rick Strahl's post Caveats with the runAllManagedModulesForAllRequests in IIS 7/8 è la migliore spiegazione dell'interazione tra le impostazioni che ho trovato. Anche la documentazione di IIS su module preCondition attribute vale la pena leggerla.

Ricordare che questa modifica della configurazione non è necessaria se è stato applicato il QFE poiché questo comportamento diventa l'impostazione predefinita.

<system.webServer> 
    <modules> 
    <remove name="UrlRoutingModule-4.0" /> 
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
    </modules> 
</system.webServer> 
+0

Sì, questo è il modo migliore per risolvere il problema, abbiamo acquistato un Win 2012 che ha funzionato correttamente e ho provato con la tua soluzione l'errore 2008 e funziona come previsto. Stiamo anche andando a mantenere il server 2008 ora che funziona senza runAllManageModulesForAllRequests. –

+0

Se si dispone di un server Windows 2008 con IIS 7.0 (non R2), questo è il collegamento per il download dell'aggiornamento rapido: http://www.microsoft.com/en-us/download/details.aspx?id=11342 –

+0

Brilliant ! Grande successo, molto bello! – maxwellb

44

Provare a utilizzare questo:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    ... 
</system.webServer> 

EDIT:

La soluzione di cui sopra funzionerà per .NET 3.5 o al di sotto. Se si utilizza .NET 4.0 o superiore, si potrebbe desiderare di provare installing IIS7 QFE

Inoltre, this article vale la pena leggere per capire la differenza tra i due.

+0

Controllare i registri delle applicazioni di EventViewer per un errore. Controllare i registri IIS dalla posizione C: \ inetpub \ logs per le richieste di una pagina. Avanti condividere queste informazioni qui così sarà più facile per risolvere il problema. –

+0

questo risolve il problema, ma il motivo per cui web.config non funzionava così com'è. cioè, perché sono costretto ad aggiungere questo attributo e c'è qualche problema di prestazioni che permetta questo? Grazie –

+4

Questa impostazione indica a IIS di eseguire moduli gestiti per qualsiasi richiesta, anche per richieste statiche (ad es. Immagini, .css, .js, ...), quindi influisce sulle prestazioni per tali richieste. Si consiglia di leggere [questo articolo per maggiori informazioni] (http://blogs.msdn.com/b/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of- senza estensione-URL-senza-impatto-statico-requests.aspx). L'autore di questo articolo fornisce anche un'altra soluzione che è possibile provare: [installazione di IIS7 QFE] (http://support.microsoft.com/kb/980368). – kdrvn

0

Non so se questo risolverà il problema, ma è stato risolto uno che avevo distribuito e l'app MVC a IIS.

Ho dovuto aggiungere una mappa dell'applicazione jolly a aspnet_isapi.dll per la directory home/virtuale dell'applicazione. È possibile farlo facendo clic con il pulsante destro del mouse sul sito Web/directory virtuale e selezionando la scheda home directory/directory virtuale, facendo clic sul pulsante di configurazione e quindi facendo clic sul pulsante Inserisci nella sezione delle mappe dell'applicazione jolly.

C: \ WINDOWS \ microsoft.net \ Framework64 \ v4.0.30319 \ aspnet_isapi.dll

Buona fortuna!

9

Ho avuto un problema simile. Ho provato molte delle soluzioni descritte qui (la voce di configurazione di Web.Config system.webServer, ecc.) Senza alcun risultato. Alla fine, ho scoperto qual era il problema con la mia particolare installazione. Stavo pubblicando il mio sito web sul file system locale e poi copiando quei file sul server. Si è scoperto che il file Global.asax non faceva parte dei file pubblicati. Una volta copiato quel file, l'errore è andato via.

+4

Uomo, la tua risposta merita +1000, sul serio! Ho passato mezza giornata a "risolvere il problema" del routing interrotto, giusto per rendermi conto di aver dimenticato di utilizzare 'Global.asax'. – uncoder

+0

Felice di essere di aiuto! :) –

1

Come menzionato da SonicTheLichen, se si pubblica da Visual Studio, il file gloabal.asax non viene copiato per impostazione predefinita. Copiando il global.asax sul tuo server web dovrebbe risolvere il problema. Grazie a SonicTheLichen per aver provato la soluzione.

saluti, Saurabh

0

Ho avuto un problema simile. Ho dovuto distribuire un sito .net MVC su un nuovo server con Windows 2008 e IIS 7.5 installati. Quando ho controllato i programmi e le funzionalità, ho visto che era installato solo .Net Framework 4.5.1. Ho abilitato manualmente la funzionalità di Windows 3.5.1 di Windows. Dopo aver installato MVC 4.0, il routing non ha funzionato.

La mia soluzione:
1) Disinstallare il framework .Net 4.5.1 e MVC 4.0
2) Installare il .Net Framework 4.0
3) Installare NET Framework 4.5.1
4) Installare MVC 4.0

0

so che questo è vecchio, ma gli aggiornamenti di Windows solo ora sprecato un paio d'ore per me:

se si gestisce le vostre eccezioni in Global.asax questo può anche essere semplice come tenere le finestre aggiorna lo stesso del vostro dev ENV ... Per me, non ho ovviamente, questo è stato risolto d in un'eccezione "could not load ....", che il mio global.asax ha provato a gestire ea sua volta ha avuto lo stesso problema ma nasconde il problema sottostante .....

0

Ho dovuto abilitare gli script nel Sezione Mappatura gestore delle proprietà del sito Web in IIS.

Handler Mappings

Aprire IIS, fare clic sul sito in questione. Aprire i mapping del gestore e fare clic su "Modifica autorizzazioni funzionalità". Seleziona le caselle per Script ed Esegui, quindi fai clic su OK. Buono per andare!

Problemi correlati