ASP.NET MVC na IIS6

Gdzie znajdę dobre wskazówki na temat najlepszych praktyk biegania ASP.NET MVC na IIS6?

Nie widziałem jeszcze żadnych realistycznych opcji dla hostów internetowych, którzy zapewniają hosting IIS7. Głównie dlatego, że nie mieszkam w USA

Więc zastanawiałem się jak najlepiej budować aplikacje w ASP.NET MVC i udostępnić go do wdrożenia zarówno na IIS6, jak i IIS7. Należy pamiętać, że jest to dla standardowych hostów internetowych, więc nie ma dostępu do filtrów ISAPI lub specjalnych ustawień wewnątrz IIS6.

Czy jest jeszcze coś, o czym warto pomyśleć przy opracowywaniu ASP.NET MVC-aplikacje do targetowania IIS6? Jakieś funkcje, które nie działają?

UPDATE: jednym z większych problemów jest problem z trasami. Wzorzec {controller} / {action} będzie działał na IIS7, ale nie na IIS6, który potrzebuje {controller}.mvc/{action}. Jak zrobić to przezroczystym? Ponownie, brak ISAPI i brak IIS-settings, proszę.

Author: Seb Nilsson, 2008-08-29

8 answers

Trochę mi to zajęło, ale wymyśliłem, jak sprawić, by rozszerzenia działały z IIS 6. Najpierw musisz przerobić routing bazowy, aby go uwzględnić .aspx tak, że będą one kierowane przez ASP.NET filtr ISAPI.

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

Jeśli przejdziesz do domu.na przykład aspx, Twoja strona powinna działać poprawnie. Ale Domyślnie.aspx i domyślny adres strony http://[website]/ przestają działać poprawnie. Jak to naprawić?

Musisz zdefiniować drugą trasę. Niestety, użycie domyślne.aspx ponieważ trasa nie działa poprawnie:
routes.MapRoute(
    "Default2",                                             // Route name
    "Default.aspx",                                         // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);
Jak to działa? Cóż, tutaj potrzebujesz oryginalnego kodu routingu:
routes.MapRoute(
    "Default2",                                             // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Gdy to robisz, domyślnie.aspx i http: / / [website] / oba zaczynają działać ponownie, myślę, że dlatego, że zostają pomyślnie zmapowane z powrotem do kontrolera domowego. Więc kompletne rozwiązanie to:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

        routes.MapRoute(
            "Default2",                                              // Route name
            "{controller}/{action}/{id}",                            // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
}

I Twoja strona powinna zacząć działać dobrze pod IIS 6. (Przynajmniej tak jest na moim komputerze.)

Oraz jako bonus, jeśli używasz Html.ActionLink() na swoich stronach nie należy zmieniać żadnej innej linii kodu w całej witrynie. Ta metoda dba o prawidłowe tagowanie na .rozszerzenie aspx do kontrolera.

 14
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-25 00:43:54

Ponieważ nie można modyfikować ustawień IIS do mapowania .mvc do ASP.Net, możesz użyć innego rozszerzenia, które jest już zmapowane do ASP.Net. na przykład, można użyć {controller}.ashx/{action} i powinno działać po wyjęciu z pudełka na IIS 6.

 7
Author: Sean Carpenter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-30 12:31:04

Nie musisz żyć z tym rozszerzeniem, jeśli możesz zainstalować filtr ISAPI na serwerze.

Zasadniczo przekierowujesz dopasowane adresy URL do {kontrolera}.odmiana mvc, następnie w ASP.NET przepisujesz ten adres url, aby go usunąć .mvc - robiąc to nie musisz definiować żadnych dodatkowych tras ani ujawniać .mvc dla użytkowników.

Pisałem o tym tutaj: http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

A Steve Sanderson też ma tu dobry post: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

 4
Author: Ben Scheirman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 16:58:31

Jak wspomniano w tym blogu przez Phil Hack, możliwe jest ustawienie adresów URL bez rozszerzeń dla ASP.NET MVC w IIS 6 za pomocą mapowania aplikacji wieloznacznych :

  1. W IIS 6, przejdź do Właściwości konfiguracji aplikacji dla Twojego ASP.NET aplikacja internetowa MVC.
  2. Kliknij " Wstaw..."w sekcji Mapy aplikacji wieloznacznych.
  3. Ustaw plik wykonywalny na ścieżkę aspnet_isapi.dll (na mojej maszynie jest to c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll).
  4. upewnij się, że nie sprawdzasz "zweryfikuj, że plik istnieje" i kliknij "OK".

Jednak, jak również wspomniano przez Hack, istnieją pewne implikacje wydajności robi to.

 4
Author: PropellerHead,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-21 07:05:00

Z IIS6 możesz zrobić jedną z dwóch rzeczy:

  1. Konfiguracja filtra ISAPI do mapowania adresów URL MVC do ASP.NET
  2. Dołącz rozszerzenie w adresie URL . Na przykład: htp: / / localhost / Home.mvc

Ponieważ opcja 1 nie jest dostępna na większości hostów internetowych, musisz wybrać numer 2.

 2
Author: Espo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-29 08:56:11

Przepisywanie adresów Url może pomóc rozwiązać problem. Zaimplementowałem rozwiązanie pozwalające na wdrożenie aplikacji MVC w dowolnej wersji IIS, nawet jeśli używany jest hosting wirtualny. http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx

 1
Author: Alex Ilyin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-24 06:23:48

Mam przykładową aplikację na IIS6.

Znalazłem szybkie i brudne rozwiązanie. (Brudny, ponieważ zawiera domyślną nazwę widoku z rozszerzeniem) Nie wymaga dodatkowej trasy ani niczego specjalnego. (Z wyjątkiem, domyślna trasa musi {controller}.aspx/{akcja}... format)

Tutaj Domyślne.aspx

<%@ Page Language="C#"%>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
    HttpContext.Current.RewritePath("~/Home.aspx/index");
    IHttpHandler httpHandler = new MvcHttpHandler();
    httpHandler.ProcessRequest(HttpContext.Current);
}
</script>

Moje przykładowe aplikacje domyślną akcją było index, w katalogu domowym.

Uwaga: widziałem ten kod na blogu Phila Haacka. Dzięki Brianowi Lowe ' owi.

 0
Author: anov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-21 23:50:07

Mam szczegółowy przewodnik krok po kroku, ale wymaga użycia isapi_rewrite. Zobacz na: http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/

 -2
Author: Jim Geurts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-02 20:21:40