2010-02-23 4 views
14

J'ai eu un problème de migration VS.Net 2008/MVC 1 à VS.NET 2010 (+ C# 4.0)/MVC 2Déploiement Asp.Net MVC 2/C# 4.0 application sur IIS 6

le web.config has been updated, le site fonctionne bien dans Cassini, mais mon problème est maintenant déployaient sur IIS 6.

I mis à jour le site Web pour exécuter à l'aide ASP.Net 4, mais quelle que soit l'URL que j'essaie, je toujours une 404 Erreur. C'est comme si le routage n'avait pas été pris en compte (oui, le wildcard mapping a été fait).

Je ne comprends pas ce bordel et ne pouvais pas google quelque chose d'intéressant ... Merci pour vos suggestions!

+0

J'ai essayé de déployer le projet par défaut créé à l'aide « Ajouter un nouveau projet ... » et a rencontré les mêmes problèmes. Toujours chercher des réponses, mais en espérant recevoir vos conseils .... – Mose

+1

J'ai toujours été foutu avec le mapping générique et cette putain de case à cocher "vérifier le fichier existe". Scrub tout, commencer à partir de la case départ, et suivez ceci: http://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/ et quand je dis tout gommage , Je veux dire tout. Ne supposez pas que quelque chose est correct. Commencer à la case départ et tripler tout. – Will

+0

Je l'ai encore fait mais ça ne marche toujours pas. L'application avec laquelle je travaille fonctionne parfaitement dans MVC 1, mais depuis que j'ai passé à .Net 4/MVC 2, le routage est cassé ... Comme je l'ai dit dans mon précédent commentaire j'ai essayé avec l'application exemple et je ne peux pas faire ça marche. Merci pour votre aide. Toute autre suggestion? – Mose

Répondre

15

Ok je suis y répondre (grâce à un collègue)

Lors de la migration de ASP.Net 2.0 à ASP.Net4.0, si vous rencontrez le même problème, puis vérifier dans Extension du service Web si ASP.Net v4 est Autorisé.

Dans mon cas, après l'installation de .Net framework 4, il était interdit.

Will & Mark: merci pour votre aide, j'espère que cela va aider les autres.

6

Je pense que je sais ce qui se passe: sur IIS6, ainsi que le mappage générique, vous aurez besoin d'un document par défaut (Default.aspx) qui achemine les demandes de dossier au gestionnaire MVC.

Il y en avait un inclus avec les modèles de projet MVC1, mais it has been removed dans MVC2.

Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="YourNameSpace._Default" %> 

<%-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --%> 

et Default.aspx.cs:

using System.Web; 
using System.Web.Mvc; 
using System.Web.UI; 

namespace YourNameSpace 
{ 
    public partial class _Default : Page 
    { 
     public void Page_Load(object sender, System.EventArgs e) 
     { 
      // Change the current path so that the Routing handler can correctly interpret 
      // the request, then restore the original path so that the OutputCache module 
      // can correctly process the response (if caching is enabled). 

      string originalPath = Request.Path; 
      HttpContext.Current.RewritePath(Request.ApplicationPath, false); 
      IHttpHandler httpHandler = new MvcHttpHandler(); 
      httpHandler.ProcessRequest(HttpContext.Current); 
      HttpContext.Current.RewritePath(originalPath, false); 
     } 
    } 
} 

Quand vous dites « Il est comme si le routage n'a pas été prise en compte », je pense qu'il est en fait pas, et cela Est votre problème.

+0

Merci pour votre réponse. Malheureusement, j'avais déjà un Default.aspx avec presque le même code-behind. J'ai essayé d'utiliser votre code (la seule différence était la fin du chemin de réécriture vers le chemin d'origine), mais cela ne fonctionne toujours pas. Néanmoins, j'ai obtenu un BIG CLUE: quand j'essaye mon URL racine (ou n'importe quelle URL pour cette application), IIS me renvoie l'erreur 404 TRÈS RAPIDEMENT, événement après un iisreset ou un redémarrage du serveur. Je suppose que ça ne charge rien! Vérification des problèmes de cette manière avec C# 4.0. (Pour info, l'url est http://push.widgetbooster.com) – Mose

+0

Wow, je devenais fou avec ce problème (j'utilise mvc 2 en .net 3.5 w/IIS 6) mais cela a résolu le problème! Merci! – Francisco

2

Ce finalement fixé pour moi:

je dit plus tôt, et un petit peu prématurément. Mon commentaire sur le post de Mark B consistait à afficher mon index initial, mais j'ai continué à recevoir les erreurs 404 chaque fois que je naviguais vers une autre vue.

J'ai également été distrait par la solution approuvée de coche verte dans ce forum particulier, mais je ne pouvais même pas voir le dossier des extensions du serveur Web dans IIS 6 sur mon bureau; par conséquent, je n'avais aucun contrôle de ce point de vue sur l'activation de l'aspnet 4.0, bien que je me suis assuré qu'il a été installé en effectuant exécutant la ligne de commande suivante:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319> aspnet_regiis -i 

Maintenant, pour la pièce réelle qui m'a finalement permis de naviguer vers les autres vues en plus juste mon Accueil/Index:

dans le fichier Global.asax.cs de votre VS 2010 Solution, vous verrez le code comme suit dans la méthode RegisterRoutes:

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

J'ai simplement ajouté « .aspx » après la section {action} de la balise comme suit:

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}.aspx/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

Et ahla wahla Sandwich au beurre d'arachide et à la gelée. : 0)

0

Si vous voulez le faire en C#, ajoutez simplement la référence System.DirectoryServices et cette pièce devrait bien faire le travail.

DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/W3SVC"); 
w3svc.Invoke("EnableWebServiceExtension", "ASP.NET v4.0.30319"); 
w3svc.CommitChanges(); 

HTH

Questions connexes