ASP.NET MVC sur IIS 7.5

J’utilise Windows 7 Ultimate (64 bits) avec Visual Studio 2010 RC. J’ai récemment décidé de faire exécuter / déboguer mes applications sur IIS plutôt que sur le serveur de développement qui l’accompagne.

Cependant, chaque fois que j’essaie d’exécuter une application MVC, j’obtiens l’erreur suivante:

Erreur HTTP 403.14 – Interdit Le serveur Web est configuré pour ne pas répertorier le contenu de ce répertoire. Détaillé

Informations d’erreur

Répertoire de moduleListingModule

Notification ExecuteRequestHandler

Erreur StaticFile du gestionnaire

Code 0x00000000 demandé

URL http: // localhost: 80 / mySite /

Chemin physique C: \ myProject \ mySite \

Logon Method Anonymous Logon

Utilisateur anonyme

J’ai placé un fichier default.aspx dans le répertoire et j’ai reçu l’erreur suivante:

Erreur HTTP 500.21 – Le gestionnaire d’erreurs du serveur interne “PageHandlerFactory-Integrated” a un mauvais module “ManagedPipelineHandler” dans sa liste de modules

Y a-t-il d’autres étapes que j’ai oublié de prendre pour que cela fonctionne?

Remarques: J’ai installé IIS 7.5 après avoir installé VS 2010 RC. J’ai utilisé le bouton intégré “Créer un répertoire virtuel” sous l’onglet “Web” dans les “Propriétés” du projet MVC dans Visual Studio 2010. Je me suis assuré que l’application utilisait le pool d’applications ASP.NET 4.

Vous trouverez ci-dessous les fonctionnalités installées d’IIS.

texte alt

    ASP.NET 4 n’était pas enregistré dans IIS. J’ai dû exécuter la commande suivante dans la ligne de commande / run

    32 bits (x86) Windows

    % windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -ir

    64 bits (x64) Windows

    % windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ir

    Note du commentaire de David Murdoch:

    Que la version de .net a changé depuis que cette réponse a été postée. Vérifiez quelle version du framework se trouve dans le répertoire% windir% \ Microsoft.NET \ Framework64 et modifiez la commande en conséquence avant de l’exécuter (il s’agit actuellement de v4.0.30319)

    Une autre chose à vous assurer est le jeu suivant dans votre web.config:

        

    Assurez-vous que vous disposez de l’ensemble suivant dans votre fichier web.config:

        

    Meilleure solution:

    Même si la solution ci-dessus fonctionne parfaitement , elle peut causer d’autres problèmes car elle exécute tous les modules HTTP enregistrés sur chaque requête (même à chaque requête de .jpg .gif .css .html .pdf, etc.) et constitue évidemment un gaspillage de ressources. Au lieu

           

    Assurez-vous que l’atsortingbut preCondition est vide, cela signifie qu’il s’exécutera sur toutes les requêtes. [Lire la suite] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , “Read original post”)

    Une autre raison pour laquelle quelqu’un pourrait obtenir cette erreur est que le fichier Global.asax n’est plus dans le dossier racine.

    Je recevais également cette erreur et j’ai découvert que “Redirection HTTP” n’était pas activé dans Windows Server. Cet article de blog le souligne également: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx

    Doux Jésus. J’ai essayé toutes les choses ci-dessus (mais j’ai trouvé mes parameters identiques). ENCORE UNE AUTRE SOLUTION si vous rencontrez des problèmes:

    http://support.microsoft.com/kb/980368

    Essayez d’installer cette base de connaissances pour votre système. Si vous voyez des 404, c’est peut-être parce que vous n’avez pas cette mise à jour – et le module isapi n’est tout simplement pas trouvé et il n’y a pas grand chose à faire sans cela!

    Vous pouvez également basculer AppPool en mode intégré . Merci à Michael Bianchi ( https://stackoverflow.com/a/7956546/1143515 ), je veux seulement le souligner.

    Pour moi, sur une VM Azure Server 2012 R2 IIS 8.5 avec une application Asp.Net MVC 5 (bin déployé MVC 5), je devais procéder comme suit à partir d’une invite de commandes cmd élevée même si 4.5 était déjà installé:

     dism /online /enable-feature /featurename:IIS-ASPNET45 

    Source: http://support.microsoft.com/kb/2736284

    J’ai aussi brutalement installé toutes les fonctionnalités d’IIS avec le PowerShell suivant:

     import-module servermanager add-windowsfeature web-server -includeallsubfeature 

    Source: http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2

    Maintenant, mon application fonctionne.

    Une application MVC a été déplacée sur un nouveau serveur. .NET 4 et MVC 3 ont été installés, mais nous avons toujours “Erreur 403.14”. Dans ce cas, cela signifiait qu’IIS ne comprenait pas qu’il s’agissait d’une application MVC, il cherchait la page par défaut.

    La solution était simple: la redirection HTTP n’était pas installée sur le serveur.

    Gestionnaire de serveur – Rôles – Serveur Web (IIS) – Services de rôles – Redirection HTTP: non installé. Installé, problème résolu.

    Aussi, si votre application est précompilée, vous devriez avoir

    PrecomstackdApp.config

    dans le dossier racine de votre application, sinon vous pouvez également obtenir l’ HTTP Error 403.14 .

    Une autre solution possible, si vous déplacez votre global.asax, assurez-vous que le balisage pointe vers la classe MvcApplication correcte. J’espère que cela sauvera quelqu’un à l’avenir.

    J’avais utilisé l’extension WebDeploy IIS pour importer mes sites Web de IIS6 vers IIS7.5. Tous les parameters IIS correspondaient exactement à ceux de l’environnement de production. Après avoir essayé toutes les solutions proposées ici, dont aucune ne fonctionnait pour moi, je devais simplement modifier le paramètre Pool d’applications du site Web de Classic à Integrated.

    J’ai rencontré le même problème 404.14 soudainement. Enfin, le problème a été résolu en décochant “précomstackr lors de la publication” dans les parameters du profil de publication.

    J’ai modifié mon itinéraire par défaut à un moment donné à partir de:

     routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

    À:

     routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index" } 

    Ce qui m’a donné votre erreur. Je suis content que quelqu’un ait mentionné le routage parce que j’aurais probablement été là pour toujours.

    Dans mon cas, ASP.NET 4.5 n’est pas installé sur le serveur, l’installation d’ASP.NET 4.5 a donc résolu le problème.

    Vous pouvez résoudre cette erreur en exécutant cmd en tant qu’administrateur que entrer la description de l'image ici

    Faites la même chose que dans l’image pour Windows 32 bits

    Apportez simplement des modifications en 64 bits en tant que framework64 au lieu du framework uniquement. Allez dans iis et rafraîchissez le site.
    Si vous rencontrez encore des erreurs, apportez des modifications au pool d’applications

    J’ai eu un autre problème qui a conduit à ce problème.

    • Je m’étais assuré que mon pool d’applications exécutait .net 4 en mode intégré
    • J’avais couru aspnet_regiis.exe -i
    • J’ai vérifié que les permissions de dossier étaient correctement définies pour le compte exécutant mon pool d’applications

    Aucune de ces choses n’a fonctionné. Il s’est avéré que dans mes modules web.config sous system.webserver> j’avais les éléments suivants:

      

    De toute évidence, cela a supprimé le module d’authentification Windows qui semblait en quelque sorte déstabiliser.

    J’espère que cela aide quelqu’un, car cela me coûte la plupart du temps une soirée!

    L’interface utilisateur est un peu différente dans les nouvelles versions de Windows Server. Voici où vous devez activer ASP.Net afin de le faire fonctionner sur IIS

    Fix IIS & Asp.net

    Ajouter une autre solution à ce problème.

    Dans mon fichier Global.asax.cs j’avais désactivé les tentatives de fichiers php à être consommés par le pipeline MVC en utilisant ce qui suit:

    routes.IgnoreRoute( "{*php}" );

    Je les avais déjà fait dans un projet MVC2 et cela fonctionnait bien, mais cela dans mon application MVC 3 a causé le problème signalé ci-dessus.

    Encore une autre raison pour laquelle cela peut se produire: votre RouteConfig.cs ou WebApiConfig.cs sont invalides.

    Dans mon cas, j’avais un itinéraire défini comme tel (notez la parenthèse au lieu de l’accolade):

     ... routeTemplate: "api/(something}" ... 

    Veuillez noter que pour les utilisateurs de Windows 8, vous devez append / supprimer des composants Windows et supprimer la version du redémarrage de .net, puis la réinstaller pour pouvoir l’enregistrer avec IIS. Je suppose que cela se produit si vous obtenez .net 4.5 à partir de Visual Studio et installez ensuite IIS.

    Aussi étrange que cela puisse paraître, la réinstallation d’IIS a été ce qui a fonctionné pour moi, avec la commande suivante exécutée depuis le dossier de la version .net:

     aspnet_regiis.exe /i 

    entrer la description de l'image ici

    Lorsque j’ai exécuté cette commande pour la première fois, j’ai commencé à recevoir l’erreur HTTP 403.14. Mais une fois que j’ai exécuté la commande à nouveau, cela a résolu le problème.

    Obs : Une autre chose que j’ai également faite a été de supprimer HTTP Redirect des fonctionnalités du serveur dans l’écran Server Management avant de réinstaller IIS. Peut-être que cela a également eu un impact sur la résolution du problème, mais je ne suis pas sûr. Donc, si la réinstallation d’IIS ne fonctionne toujours pas, essayez de supprimer HTTP Redirect et réessayez. J’espère que cela pourrait fonctionner pour vous aussi.

    Pour résoudre ce problème sans avoir à recourir au mode 32 bits, vous devrez mettre à jour le code source de ce projet.

     public static void RegisterUrlRoutesFromAtsortingbutes(RouteCollection routes) { // Enumerate assembly for UrlRoute atsortingbutes. List routeParams = new List(); AppDomain.CurrentDomain.GetAssemblies() .ToList() .ForEach(assembly => routeParams.AddRange(GetRouteParamsFromAtsortingbutes(assembly))); 

    J’ai soulevé ce problème en tant que discussion sur le forum de discussion du projet codeplex de cloud informatique.

    http://itcloud.codeplex.com/discussions/262000

    Cela a fonctionné pour moi et cela pourrait être utile à un autre.

    Peut-être que tous les composants requirejs ne sont pas présents ou / et que tous ne sont pas enregistrés correctement. Pour résoudre ce problème, décochez toutes les options du Panneau de configuration -> Activer ou désactiver les fonctionnalités Windows -> Internet Information Services -> Services World Wide Web -> Fonctionnalités de développement d’applications, décochez toutes les options et revérifiez toutes vérifier si le problème est résolu.

    entrer la description de l'image ici

    Si vous exécutez IIS 8.5 sur Windows 8 ou Server 2012, il se peut que l’exécution de mvc 4/5 (.net 4.5) ne fonctionne pas dans un répertoire virtuel. Si vous créez une entrée d’hôte local dans le fichier hôte pour pointer vers votre ordinateur local, puis pointez un nouveau site Web IIS local vers ce dossier (avec l’entrée d’en-tête d’hôte correspondant), vous constaterez qu’il fonctionne.

    J’ai créé un nouvel espace de noms (et donc un dossier) identique à la route vers un contrôleur (par exemple, MvcApp/Test/SomeClasses.cs et MvcApp/Controllers/TestController.cs ). Cela a également entraîné un 403.14!

    Pour moi, la solution consistait à append le package NuGet Microsoft.AspNet.WebPages (ainsi que ses dépendances Razor et Infrastructure) à mon projet Web.

    L’infrastructure a dû être réinstallée de force car elle n’a pas été ajoutée en tant que référence au début.

    Dans mon cas, la version de CRL .NET dans les applications du pool d’applications était définie sur Pas de code géré (je ne sais pas pourquoi). La définition de .NET CRL Version v4.0.30319 a résolu le problème.