2010-02-23 22 views
14

Mam problem migracji z VS.Net 2008/MVC 1 do VS.NET 2010 (+ C# 4.0)/MVC 2Wdrażanie Asp.Net MVC 2/C# 4.0 aplikacji na IIS 6

web.config has been updated, strona działa dobrze w Cassini, ale mój problem teraz jest rozmieszczanie na IIS 6.

I aktualizowane na stronie internetowej, aby uruchomić używając ASP.Net 4, ale cokolwiek URL próbuję, zawsze mam 404 błąd. To tak, jakby routing nie był brany pod uwagę (tak, zrobiono wildcard mapping).

Nie rozumiem tego bałaganu i nie mogłem google nic ciekawego ... Dzięki za sugestie!

+0

starałem się wdrożyć projekt stworzony przy użyciu domyślnego „dodaj nowy projekt ...” i napotkał te same problemy. Wciąż szukam odpowiedzi, ale mając nadzieję na twoje porady ... – Mose

+1

Zawsze miałem do czynienia z mapowaniem wieloznacznym i tym cholernym polem wyboru "sprawdź plik". Zbierz wszystko, zacznij od kwadratu i wykonaj następujące czynności: http://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/ i kiedy mówię, że wszystko szoruje , Mam na myśli SCRUB WSZYSTKO. Nie zakładaj, że coś jest poprawne. Zacznij od kwadratu pierwszego i potrójnie sprawdź wszystko. – Will

+0

Zrobiłem to ponownie, ale nadal nie działa. Aplikacja, z którą pracuję, działa idealnie w MVC 1, ale od kiedy przeszedłem do .Net 4/MVC 2, routing jest zepsuty ... Jak już wspomniałem w poprzednim komentarzu próbowałem z przykładową aplikacją i nie mogę zrobić działa. Dzięki za pomoc. Wszelkie inne sugestie? – Mose

Odpowiedz

15

Ok mam y odpowiedź (dzięki kolegą)

Podczas migrowania z ASP.NET 2.0 do ASP.Net4.0, jeśli spełniasz ten sam problem, następnie sprawdzić w rozszerzeń usługi sieci Web jeśli ASP.Net v4 to dozwolone.

W moim przypadku, po zainstalowaniu platformy .Net 4, było to zabronione.

Czy & Mark: dzięki za pomoc, mam nadzieję, że pomoże to innym.

6

Myślę, że wiem, co się dzieje: na IIS6, jak również mapowanie wieloznaczne, będziesz potrzebować dokumentu domyślnego (Default.aspx), który kieruje żądania folderów do programu obsługi MVC.

Zawiera jeden z szablonów projektów MVC1, ale it has been removed w 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. --%> 

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

Kiedy mówisz "To tak, jakby routingu nie została uwzględniona", podejrzewam, że w rzeczywistości nie jest, a to to Twój problem.

+0

Dzięki za odpowiedź. Niestety, już miałem Default.aspx z prawie takim samym opóźnieniem kodu. Próbowałem użyć twojego kodu (jedyną różnicą była kończąca się Rewritepath z powrotem do oryginalnej ścieżki), ale wciąż nie działa. Mimo to dostałem WIELKI CLUE: kiedy próbuję mój główny adres URL (lub jakikolwiek URL dla tej aplikacji), IIS zwraca mi błąd 404 BARDZO SZYBKO, zdarzenie po zresetowaniu lub zrestartowaniu serwera. Przypuszczam, że nic nie ładuje! Sprawdzanie problemów w ten sposób za pomocą C# 4.0. (FYI, adres URL to http://push.widgetbooster.com) – Mose

+0

Wow I szaleje z tym problemem (używam mvc 2 w .net 3.5 w/IIS 6), ale to rozwiązało! dzięki! – Francisco

2

To ostatecznie ustalone to dla mnie:

ja skomentował wcześniej, i odrobinę przedwcześnie. Mój komentarz do postu Marka B spowodował, że mój początkowy widok indeksu pojawił się, ale potem ciągle otrzymywałem błędy 404, gdy nawigowałem do dowolnego innego widoku.

Byłem także rozproszony przez zatwierdzone zielone znaczniki na tym forum, ale nie mogłem nawet zobaczyć folderu rozszerzeń serwera WWW w IIS 6 na moim pulpicie; w związku z tym nie miałem kontroli nad tym punktem dostępu do aspnet 4.0, choć zrobiłem pewien, że został zainstalowany wykonując uruchamiając następujące polecenie:

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

Teraz do rzeczywistego elementu, który w końcu pozwolił mi przejść do innych widoków oprócz tylko mój dom/Index:

w aktach rozwiązania VS 2010 Global.asax.cs, widać kod w następujący sposób w metodzie RegisterRoutes:

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

po prostu dodana „aspx” po {akcja} sekcji znacznika następująco:

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

Ahla wahla Masło orzechowe i kanapki z galaretką. : 0)

0

Jeśli chcesz zrobić to w języku C#, po prostu dodaj odwołanie do System.DirectoryServices, a ten fragment powinien ładnie działać.

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

HTH

Powiązane problemy