2010-02-23 5 views
14

ich ein Problem von VS.Net 2008/MVC 1 zu VS.NET 2010 (+ C# 4.0)/MVC 2 Migration bekamBereitstellen von Asp.Net MVC 2/C# 4.0-Anwendung auf IIS 6

die web.config has been updated läuft die Website auch in Cassini, aber mein Problem ist jetzt auf IIS bereitstellen 6.

ich die Website aktualisiert ASP.Net 4 laufen mit, aber was auch immer URL ich versuche, ich habe immer ein 404 Error. Es ist, als ob das Routing nicht berücksichtigt wurde (ja, wildcard mapping wurde gemacht).

Ich verstehe dieses Durcheinander nicht und konnte nichts interessantes googeln ... Danke für Ihre Vorschläge!

+0

Ich habe versucht, das Standard-Projekt mit geschaffen zu implementieren ‚neues Projekt hinzufügen ...‘ und stieß auf die gleichen Probleme. Immer noch googeln nach Antworten, aber ich hoffe auf deine Ratschläge .... – Mose

+1

Ich habe immer mit der Wildcard-Mapping und diese gottverdammte "Verify-Datei existiert" Checkbox geschraubt. Scrub alles, starten Sie von Platz eins, und folgen Sie diesem: http://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/ und wenn ich sage alles schrubben , Ich meine, alles ist sauber. Gehe nicht davon aus, dass etwas korrekt ist. Beginnen Sie am ersten Platz und überprüfen Sie alles dreimal. – Will

+0

Ich habe es wieder getan, aber es funktioniert immer noch nicht. Die Anwendung, mit der ich arbeite, funktioniert perfekt in MVC 1, aber seit ich an .Net 4/MVC 2 weitergegeben wurde, ist Routing unterbrochen ... Wie ich in meinem vorherigen Kommentar sagte, versuchte ich mit der Beispiel-App und kann nicht machen es funktioniert. Danke für Ihre Hilfe. Irgendwelche anderen Vorschläge? – Mose

Antwort

15

Ok Ich habe y Antwort (dank eines Kollegen)

Wenn von ASP.Net 2.0 ASP.Net4.0 Migration , wenn Sie das gleiche Problem gerecht zu werden, dann in Web Service Extension überprüfen Wenn ASP.Net v4 ist Erlaubt.

In meinem Fall wurde nach der Installation des .Net Framework 4, es verboten.

Will & Mark: Vielen Dank für Ihre Hilfe, hoffe, es wird anderen helfen.

6

Ich denke, ich weiß, was passiert: auf IIS6, sowie die Wildcard-Zuordnung benötigen Sie ein Standarddokument (Default.aspx), die Ordneranforderungen an den MVC-Handler weiterleitet.

Es war eine mit den MVC1-Projektvorlagen enthalten, aber it has been removed in 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. --%> 

und 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); 
     } 
    } 
} 

Wenn Sie sagen: "Es ist, als ob das Routing nicht berücksichtigt wurde", so vermute ich, dass es nicht wirklich ist, und dies ist dein Problem.

+0

Danke für deine Antwort. Leider hatte ich bereits eine Default.aspx mit fast dem gleichen Code-Behind. Ich habe versucht, Sie verwenden Code (der einzige Unterschied war die Beendigung Rewritepath zurück zum ursprünglichen Pfad), aber es funktioniert immer noch nicht. Trotzdem habe ich einen großen Hinweis: Wenn ich meine Root-URL (oder eine URL für diese Anwendung) versuche, gibt IIS den 404-Fehler sehr schnell, Ereignis nach einem iisreset oder einem Server-Neustart. Ich nehme an, es lädt nichts! Auf diese Weise mit C# 4.0 auf Probleme prüfen. (FYI, die URL ist http://push.widgetbooster.com) – Mose

+0

Wow, ich war verrückt mit diesem Problem (ich benutze mvc 2 in .net 3.5 w/IIS 6), aber das hat es gelöst! Vielen Dank! – Francisco

2

Diese feste schließlich es für mich:

ich früher kommentiert, und ein kleines bisschen zu früh. Mein Kommentar zu Mark B's Beitrag war, dass meine ursprüngliche Indexansicht angezeigt wurde, aber dann bekam ich immer die 404 Fehler, wenn ich zu einer anderen Ansicht navigierte.

Ich war auch abgelenkt durch die grüne Häkchen zugelassene Lösung in diesem speziellen Forum, aber ich konnte nicht einmal den Webserver Erweiterungen Ordner in IIS 6 auf meinem Desktop sehen; Aus diesem Grund hatte ich keine Kontrolle über aspnet 4.0, obwohl ich sicher, dass es durch Ausführen der folgenden Befehl Leitung installiert wurde:

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

Nun zum eigentlichen Stück, das schließlich erlaubte, mich zu den anderen Ansichten zu navigieren my Home/Index neben nur:

in der Global.asax.cs Datei Ihrer Lösung VS 2010, werden Sie sehen, Code wie in der RegisterRoutes Methode folgt:

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

ich einfach hinzugefügt „aspx“ nach der {Aktion} Abschnitt des Tags wie folgt:

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

Und ahla wahla Erdnussbutter und Jelly Sandwiches. : 0)

0

Wenn Sie es in C# tun möchten, fügen Sie einfach die System.DirectoryServices-Referenz hinzu, und dieses Stück sollte die Arbeit gut machen.

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

HTH