2013-08-18 1 views
1

J'ai une application Web ASP.NET MVC 2 qui fonctionne correctement sur mon serveur Cassini local et qui a également bien fonctionné lors de ma dernière vérification IIS 7.5 il y a quelques mois.IIS 8 - Requêtes de fichiers statiques passant par le pipeline géré malgré runAllManagedModulesForAllRequests = "false"

Mon web.config ressemble à ceci (sections non pertinentes enlevés):

<?xml version="1.0"?> 
<configuration> 

    <system.web> 

     <authentication mode="Forms"> 
      <!-- 2880 minutes is 48 hours --> 
      <forms loginUrl="~/Welcome/Login" timeout="2880" slidingExpiration="true" /> 
     </authentication> 

     <customErrors mode="RemoteOnly" /> 

     <httpHandlers> 
      <remove verb="*"  path="*.asmx" /> 
      <add verb="*"  path="*.asmx"    validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add verb="*"  path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </httpHandlers> 

     <httpModules> 
      <add name="ScriptModule"  type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </httpModules> 

    </system.web> 

    <system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
     <modules runAllManagedModulesForAllRequests="true"> 
      <remove name="ScriptModule"/> 
      <remove name="UrlRoutingModule"/> 
      <add name="ScriptModule"  preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="UrlRoutingModule"        type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     </modules> 
     <handlers> 
      <remove name="WebServiceHandlerFactory-Integrated"/> 
      <remove name="ScriptHandlerFactory"/> 
      <remove name="ScriptHandlerFactoryAppServices"/> 
      <remove name="ScriptResource"/> 
      <remove name="UrlRoutingHandler"/> 
      <add name="ScriptHandlerFactory"   preCondition="integratedMode" verb="*"  path="*.asmx"    type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="ScriptHandlerFactoryAppServices" preCondition="integratedMode" verb="*"  path="*_AppService.axd" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="ScriptResource"     preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="UrlRoutingHandler"    preCondition="integratedMode" verb="*"  path="UrlRouting.axd"  type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
     </handlers> 
     <httpErrors> 
      <remove statusCode="404" subStatusCode="-1" /> 
      <error statusCode="404" prefixLanguageFilePath="" path="Views\Shared\Iis404.htm" responseMode="File" /> 
     </httpErrors> 

    </system.webServer> 

</configuration> 

Je déploie actuellement à IIS 8 sur une machine virtuelle Azure et les demandes de contenu statique, par exemple /Styles/style.css passer par le pipeline de demande gérée, et parce que j'ai un système d'authentification en place, cela signifie que ces demandes sont bloquées et remplacées par l'écran de connexion de mon application.

J'ai trouvé ce QA (Prevent IIS from serving static files through ASP.NET pipeline) et j'ai changé <modules runAllManagedModulesForAllRequests="true">-<modules runAllManagedModulesForAllRequests="false">, mais qui ne le répare pas: les demandes de /Styles/style.css encore causé mon code ASP.NET MVC à invoquer (il invoque l'action de connexion sur ma classe WelcomeController , qui échoue parce que maintenant la propriété Controller.User renvoie null).

Je ne suis pas au courant de tout changement dans IIS8 qui déclencherait cela - mais comment puis-je le réparer quand même?

Mise à jour:

J'ajouté à mes Global.asax.cs mais cela n'a pas fonctionné:

routes.IgnoreRoute("Scripts/{*pathInfo}"); 
routes.IgnoreRoute("Styles/{*pathInfo}"); 
routes.IgnoreRoute("favicon.ico"); 

Mise à jour: J'ai installé IIS 8 sur mon ordinateur portable Windows 8 Enterprise et ma surprise, cela fonctionne comme prévu là-bas - donc il y a une différence de configuration entre mon ordinateur portable Windows 8 et la machine virtuelle Server 2012 Azure. Hmmm.

Répondre

2

je commencé à chercher des différences entre les configurations IIS de ma machine locale et la machine virtuelle Azure et je trouve la solution:

J'avais oublié le IIS> {site}> Authentification> Anonymous configuration: sur la Azure VM a été défini sur Utilisateur spécifique pour un utilisateur qui n'existait pas! Alors que dans mon IIS local, il a été défini sur Identité du pool d'applications.

Je l'ai changé en Identité de pool d'applications et maintenant il fonctionne comme prévu. Je suis surpris qu'IIS ne m'a pas donné d'autres messages d'erreur ou un moyen plus utile de diagnostiquer le problème. Hmpf.

Questions connexes