2010-09-30 13 views
0

J'ai écrit un module d'authentification de formulaires personnalisés et lorsque je l'ajoute au web.config de mon application MVC2 et que je l'exécute sous IIS7.5 J'ai l'erreur HTTP 403.14. Si j'essaie de naviguer vers l'une des URL routés, alors je reçois simplement une erreur 404. La chose agaçante est que j'ai fait tous les tests en utilisant Cassini sans aucun problème. J'ai appliqué tous les correctifs de tous les problèmes similaires en vain. Le problème semble être qu'avec mon module enregistré Mvc Routing cesse de fonctionner. De toute évidence, cela semble impliquer mon module mais pourquoi a-t-il fonctionné tout le temps en utilisant le serveur web intégré? Voici les parties System.x de mon web.config:Lorsque j'ajoute FormsAuthentication au site ASP.NET MVC2 dans IIS7.5, j'obtiens l'erreur HTTP 403.14

<system.web> 
    <compilation debug="true" defaultLanguage="c#" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
       <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
       <add assembly="Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" /> 
      </assemblies> 
    </compilation> 
    <authentication mode="Forms"> 
     <forms defaultUrl="/" loginUrl="/Authentication/Login" enableCrossAppRedirects="true" name=".GKAUTH" path="/" requireSSL="false" timeout="1440" /> 
    </authentication> 
     <membership defaultProvider="GatekeeperMembershipProvider" userIsOnlineTimeWindow="120"> 
     <providers> 
     <clear /> 
     <add name="GatekeeperMembershipProvider" type="Ewdev.Security.MembershipProviders.GatekeeperMembershipProvider, Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" connectionStringName="Ewdev Database" minRequiredPasswordLength="7" minRequiredAlphabeticCharacters="3" minRequiredAlphabeticCaseChanges="1" minRequiredNumericCharacters="1" minRequiredNonAlphanumericCharacters="0" passwordWordsPolicy="true" passwordHistoryPolicy="13" enablePasswordRetrieval="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" minRequiredUserNameLength="6" minRequiredUserNameAlphabeticCharacters="1" minRequiredUserNameNumericCharacters="0" userNameEnableNonAlphanumeric="true" userNameWordsPolicy="true" /> 
     </providers> 
    </membership> 
    <customErrors mode="On" /> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Linq" /> 
     <add namespace="System.Collections.Generic" /> 
     </namespaces> 
    </pages> 
     <trace enabled="false" mostRecent="true" /> 
    </system.web> 
    <system.webServer> 
     <validation validateIntegratedModeConfiguration="true" /> 
     <modules runAllManagedModulesForAllRequests="true"> 
      <remove name="FormsAuthentication" /> 
      <add name="FormsAuthentication" type="Ewdev.Security.GatekeeperFormsAuthenticationModule" preCondition="" /> 
     </modules> 
     <handlers> 
      <remove name="MvcHttpHandler" /> 
      <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler" /> 
      <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </handlers> 
    </system.webServer> 

Tout cela est en cours d'exécution sur mon ordinateur de bureau Windows 7 x64 avec VS2010, .NET 4 et MVC2. J'ai ASP.NET4 installé/enregistré dans IIS. Je suppose que vous voudrez probablement savoir ce qu'il y a dans le module mais la source est plutôt longue, donc je ne sais pas quel bit serait pertinent. Il est construit selon la même spécification d'API que celle intégrée, mais en dehors de la redirection vers la page de connexion, il n'y a pas d'autres modifications à l'Url de requête et l'erreur apparaît lorsque vous essayez d'afficher la page d'accueil ouverte à tout le monde. J'ai lu que cela pourrait être quelque chose à faire avec des ressources non-aspx telles que le script, css, fichiers image que les modules sont configurés pour être appliqués à tous les types de ressources? D'autres idées ont été dans la ligne de mon module appelé après le module de routage Url, mais je ne suis pas convaincu de celui-ci, et troisièmement que le Global.asax pourrait ne pas être appelé? Je suis dans mon 3ème jour à me déchirer les cheveux sur celui-ci, principalement parce que j'ai estimé 1h pour installer le site sur IIS ... Doh!

J'apprécierais toute aide que je peux obtenir et je serais ravi de réécrire mon module si seulement je pouvais déterminer ce que IIS n'aime pas. Cassini aime :-(

Répondre

0

Je pense que vous définissez votre MvcHttpHandler mal. L'attribut path doit être * au lieu de * .mvc

+0

Non, c'était un hareng rouge l'MvcHttpHandler était MVC 1 chose et n'est plus utilisé pour MVC 2, mais je tentais quoi que ce soit, surtout si elle avait quelque chose à faire avec routage. – user462823

3

J'ai enfin une solution! Mais il était obscur à l'extrême et

J'étais convaincu que le problème avait quelque chose à voir avec le routage et beaucoup de gens disaient que vous deviez ajouter le rôle spécial HTTP Redirection.J'avais déjà ajouté que ainsi que Erreur HTTP et Compression de contenu statique La solution à la fin était de ré-installer ces 3 rôles! Cela suggérerait que l'ordre d'installation des choses dans le monde IIS est très important car j'avais déjà configuré IIS7.5 avant d'installer MVC2 (via VS2010 install) et même si j'avais fait l'autre correction plusieurs fois (aspnet_regiis -i pour ASP.NET 4.0 x86 et x64) cela n'a pas résolu le problème de routage. Si j'avais installé VS2010 en premier (avec MVC2 inclus) puis installé IIS7.5, je suppose que je n'aurais pas eu le problème. Sauf que, croyez-le ou non, une réinstallation complète de IIS7.5 n'a pas pas résoudre le problème que j'avais déjà essayé il y a plusieurs jours. Donc, pour résumer et inclure toute autre configuration nécessaire les éléments suivants sont les correctifs importants:

  1. Vérifiez que vous avez exécuté aspnet_regiis -i pour les Cadre/v4 ... et Framework64/v4 ...

  2. Assurez-vous d'avoir autorisé ASP.NET v4 pour les 32 bits et 64 bits dans IIS (via le Gestionnaire des services Internet, cliquez sur l'entrée Server dans l'arborescence et aller à ISAPI et restrictions CGI)

  3. Assurez-vous que vous avez Erreur HTTP et HTTP Redirection HTTP commun IIS spéciaux rôles et Compression Article statique performances IIS rôle spécial installé. Et si vous avez alors désinstallez et ré-installez, c'est ce qui a finalement résolu le problème pour moi.

S'il vous plaît noter: Ceci est également le cas pour IIS7 que je devais faire exactement la même procédure sur la production Windows 2008 serveur. J'espère que cela aide les autres à une solution rapide. Je vais probablement perdre mon contrat car je suis si loin derrière à cause de ce problème.

Mon web.config original s'est avéré avoir plusieurs entrées inutiles, parce que j'essayais toutes les solutions que les gens venaient avec, donc ce qui suit est les parties System.x de mon site Web actuel et fonctionnel .config:

<system.web> 
    <compilation debug="true" defaultLanguage="c#" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
     <add assembly="Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" /> 
     </assemblies> 
    </compilation> 
    <authentication mode="Forms"> 
     <forms defaultUrl="/" loginUrl="/Authentication/Login" enableCrossAppRedirects="true" name=".GKAUTH" path="/" requireSSL="false" timeout="1440" /> 
    </authentication> 
    <membership defaultProvider="GatekeeperMembershipProvider" userIsOnlineTimeWindow="120"> 
     <providers> 
     <clear /> 
     <add name="GatekeeperMembershipProvider" type="Ewdev.Security.MembershipProviders.GatekeeperMembershipProvider, Ewdev.Gatekeeper.Security, Version=1.0.0.0, Culture=neutral, PublicKeyToken=02ca582b160d0e09" connectionStringName="Ewdev Database" minRequiredPasswordLength="7" minRequiredAlphabeticCharacters="3" minRequiredAlphabeticCaseChanges="1" minRequiredNumericCharacters="1" minRequiredNonAlphanumericCharacters="0" passwordWordsPolicy="true" passwordHistoryPolicy="13" enablePasswordRetrieval="true" requiresQuestionAndAnswer="true" requiresUniqueEmail="true" minRequiredUserNameLength="6" minRequiredUserNameAlphabeticCharacters="1" minRequiredUserNameNumericCharacters="0" userNameEnableNonAlphanumeric="true" userNameWordsPolicy="true" /> 
     </providers> 
    </membership> 
    <customErrors mode="On" /> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Linq" /> 
     <add namespace="System.Collections.Generic" /> 
     </namespaces> 
    </pages> 
    <trace enabled="false" mostRecent="true" /> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="true" /> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="FormsAuthentication" /> 
     <add name="FormsAuthentication" type="Ewdev.Security.GatekeeperFormsAuthenticationModule" /> 
    </modules> 
    </system.webServer> 
1

Je ne peux pas ajouter un commentaire aux utilisateurs propre réponse (note trop bas?). Quoi qu'il en soit, après avoir longtemps lutté avec mon serveur en essayant de résoudre les messages 403.14, je suis tombé sur cette question. Les étapes de la réponse ont résolu le problème pour moi finalement.

Je suppose que la partie qui a fonctionné était l'installation des rôles car j'avais essayé tout le reste suggéré ici et ailleurs.

Merci beaucoup à l'utilisateur et stackoverflow :)