Sdílet prostřednictvím


Použití ASP.NET MVC s různými verzemi služby IIS (C#)

od Microsoftu

V tomto kurzu se naučíte používat ASP.NET MVC a Směrování adres URL s různými verzemi Internetové informační služby. Naučíte se různé strategie používání ASP.NET MVC se službou IIS 7.0 (klasický režim), IIS 6.0 a staršími verzemi služby IIS.

Rozhraní ASP.NET MVC závisí na směrování požadavků prohlížeče na akce kontroleru ASP.NET Směrování. Abyste mohli využít výhod služby ASP.NET Routing, možná budete muset na webovém serveru provést další kroky konfigurace. Vše závisí na verzi Internetové informační služby (IIS) a režimu zpracování požadavků vaší aplikace.

Tady je souhrn různých verzí služby IIS:

  • IIS 7.0 (integrovaný režim) – Pro použití ASP.NET Směrování není nutná žádná zvláštní konfigurace.
  • IIS 7.0 (klasický režim) – Abyste mohli používat směrování ASP.NET, musíte provést speciální konfiguraci.
  • IIS 6.0 nebo nižší – Abyste mohli použít směrování ASP.NET, musíte provést speciální konfiguraci.

Nejnovější verze služby IIS je verze 7.5 (ve Win7). Služba IIS 7 služby IIS je součástí systémů Windows Server 2008 A VISTA/SP1 a novějších. Službu IIS 7.0 můžete také nainstalovat na libovolnou verzi operačního systému Vista s výjimkou Home Basic (viz https://technet.microsoft.com/library/cc731179%28WS.10%29.aspx).

Služba IIS 7.0 podporuje dva režimy zpracování požadavků. Můžete použít integrovaný nebo klasický režim. Při používání služby IIS 7.0 v integrovaném režimu nemusíte provádět žádné zvláštní kroky konfigurace. Při použití služby IIS 7.0 v klasickém režimu však musíte provést další konfiguraci.

Microsoft Windows Server 2003 obsahuje službu IIS 6.0. Při použití operačního systému Windows Server 2003 nelze upgradovat službu IIS 6.0 na službu IIS 7.0. Při použití služby IIS 6.0 je nutné provést další kroky konfigurace.

Systém Microsoft Windows XP Professional obsahuje službu IIS 5.1. Při použití služby IIS 5.1 je nutné provést další kroky konfigurace.

A konečně Microsoft Windows 2000 a Microsoft Windows 2000 Professional obsahuje službu IIS 5.0. Při použití služby IIS 5.0 je nutné provést další kroky konfigurace.

Integrovaný versus klasický režim

Služba IIS 7.0 může zpracovávat požadavky pomocí dvou různých režimů zpracování požadavků: integrovaného a klasického. Integrovaný režim poskytuje lepší výkon a více funkcí. Klasický režim je zahrnutý pro zpětnou kompatibilitu se staršími verzemi služby IIS.

Režim zpracování požadavků je určen fondem aplikací. Režim zpracování, který konkrétní webová aplikace používá, můžete určit tak, že určíte fond aplikací přidružený k aplikaci. Postupujte takto:

  1. Spuštění Správce Internetové informační služby
  2. V okně Připojení vyberte aplikaci.
  3. V okně Akce kliknutím na odkaz Základní nastavení otevřete dialogové okno Upravit aplikaci (viz obrázek 1).
  4. Poznamenejte si vybraný fond aplikací.

Ve výchozím nastavení je služba IIS nakonfigurovaná tak, aby podporovala dva fondy aplikací: DefaultAppPool a Classic .NET AppPool. Pokud je vybraná možnost DefaultAppPool, vaše aplikace běží v integrovaném režimu zpracování požadavků. Pokud je vybraná možnost Classic .NET AppPool, vaše aplikace běží v klasickém režimu zpracování požadavků.

Snímek obrazovky s dialogovým oknem Upravit aplikaci, které ukazuje, že služba IIS je nakonfigurovaná tak, aby spouštěla aplikaci v integrovaném režimu zpracování požadavků

Obrázek 1: Zjištění režimu zpracování požadavků (kliknutím zobrazíte obrázek v plné velikosti)

Všimněte si, že režim zpracování žádostí můžete upravit v dialogovém okně Upravit aplikaci. Klikněte na tlačítko Vybrat a změňte fond aplikací přidružený k aplikaci. Uvědomte si, že při změně ASP.NET aplikace z klasického do integrovaného režimu dochází k problémům s kompatibilitou. Další informace najdete v následujících článcích:

Pokud ASP.NET aplikace používá DefaultAppPool, nemusíte provádět žádné další kroky, abyste ASP.NET směrování (a tedy ASP.NET MVC) fungovali. Pokud je ale aplikace ASP.NET nakonfigurovaná tak, aby používala klasický fond aplikací .NET, pokračujte ve čtení, máte ještě víc práce.

Použití ASP.NET MVC se staršími verzemi služby IIS

Pokud potřebujete používat ASP.NET MVC se starší verzí služby IIS než IIS 7.0 nebo potřebujete použít službu IIS 7.0 v klasickém režimu, máte dvě možnosti. Nejprve můžete upravit směrovací tabulku tak, aby používala přípony souborů. Například místo požadavku na adresu URL, jako je /Store/Details, byste požádali o adresu URL jako /Store.aspx/Details.

Druhou možností je vytvořit něco, co se nazývá mapa skriptů se zástupnými znakůmi sadou. Mapa se zástupnými skripty umožňuje mapovat všechny požadavky do architektury ASP.NET.

Pokud nemáte přístup k webovému serveru (například aplikaci ASP.NET MVC hostuje poskytovatel internetových služeb), budete muset použít první možnost. Pokud nechcete měnit vzhled adres URL a máte přístup k webovému serveru, můžete použít druhou možnost.

Jednotlivé možnosti podrobně prozkoumáme v následujících částech.

Přidání rozšíření do směrovací tabulky

Nejjednodušším způsobem, jak získat ASP.NET, aby směrování fungovalo se staršími verzemi služby IIS, je upravit směrovací tabulku v souboru Global.asax. Výchozí a nezměněný soubor Global.asax ve výpisu 1 konfiguruje jednu trasu s názvem Výchozí trasa.

Výpis 1 – Global.asax (beze změny)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

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

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

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

Výchozí trasa nakonfigurovaná v seznamu 1 umožňuje směrovat adresy URL, které vypadají takto:

/Home/Index

/Product/Podrobnosti/3

/Produktu

Starší verze služby IIS bohužel tyto požadavky nebudou předávat architektuře ASP.NET. Proto se tyto požadavky nebudou směrovat do kontroleru. Pokud například v prohlížeči zadáte požadavek na adresu URL /Home/Index, zobrazí se chybová stránka na obrázku 2.

Snímek obrazovky s oknem Aplikace Microsoft Internet Explorer, které zobrazuje chybu 404 Nenalezena

Obrázek 2: Zobrazuje se chyba 404 Nenalezena (kliknutím zobrazíte obrázek v plné velikosti)

Starší verze služby IIS mapuje pouze určité požadavky na architekturu ASP.NET. Požadavek musí být určený pro adresu URL se správnou příponou souboru. Například požadavek na /SomePage.aspx se mapuje na rozhraní ASP.NET. Požadavek na /SomePage.htm však nikoli.

Proto aby ASP.NET Směrování fungovalo, musíme upravit výchozí trasu tak, aby zahrnovala příponu souboru, která je namapovaná na rozhraní ASP.NET.

K tomu slouží skript s názvem registermvc.wsf. Byl součástí verze ASP.NET MVC 1 v C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scriptssystému , ale od ASP.NET 2 byl tento skript přesunut do ASP.NET Futures.

Spuštěním tohoto skriptu se ve službě IIS zaregistruje nové rozšíření .mvc. Po registraci přípony .mvc můžete upravit trasy v souboru Global.asax tak, aby trasy používaly příponu .mvc.

Upravený soubor Global.asax ve výpisu 2 funguje se staršími verzemi služby IIS.

Výpis 2 – Global.asax (změněno s rozšířeními)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

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

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

            routes.MapRoute(
              "Root",
              "",
              new { controller = "Home", action = "Index", id = "" }
            );
        }

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

Důležité: Po změně souboru Global.asax nezapomeňte znovu sestavit aplikaci ASP.NET MVC.

V souboru Global.asax jsou ve výpisu 2 dvě důležité změny. V souboru Global.asax jsou teď definované dvě trasy. Vzor adresy URL pro výchozí trasu, první trasu, teď vypadá takto:

{controller}.mvc/{action}/{id}

Přidání přípony .mvc změní typ souborů, které modul směrování ASP.NET zachycuje. Díky této změně teď aplikace ASP.NET MVC směruje požadavky takto:

/Home.mvc/Index/

/Product.mvc/Details/3

/Product.mvc/

Druhá trasa, Kořenová trasa, je nová. Tento vzor adresy URL pro kořenovou trasu je prázdný řetězec. Tato trasa je nezbytná pro porovnávání požadavků provedených v kořenovém adresáři vaší aplikace. Například kořenová trasa bude odpovídat požadavku, který vypadá takto:

http://www.YourApplication.com/

Po provedení těchto úprav směrovací tabulky budete muset zajistit, aby všechny odkazy ve vaší aplikaci byly kompatibilní s těmito novými vzory adres URL. Jinými slovy, ujistěte se, že všechny odkazy obsahují příponu .mvc. Pokud ke generování odkazů použijete pomocnou metodu Html.ActionLink(), neměli byste provádět žádné změny.

Místo použití skriptu registermvc.wcf můžete do služby IIS přidat nové rozšíření, které je ručně namapováno na architekturu ASP.NET. Když sami přidáváte novou příponu, ujistěte se, že není zaškrtnuté políčko Ověřit, že soubor existuje .

Hostovaný server

Ne vždy máte přístup k webovému serveru. Pokud například hostujete aplikaci ASP.NET MVC pomocí poskytovatele internetového hostingu, nebudete mít nutně přístup ke službě IIS.

V takovém případě byste měli použít některou ze stávajících přípon souborů, které jsou namapované na architekturu ASP.NET. Příklady přípon souborů mapovaných na ASP.NET zahrnují přípony .aspx, .axd a .ashx.

Například upravený soubor Global.asax ve výpisu 3 používá místo přípony .mvc příponu .aspx.

Výpis 3 – Global.asax (změněno s příponou .aspx)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

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

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

            routes.MapRoute(
              "Root",
              "",
              new { controller = "Home", action = "Index", id = "" }
            );
        }

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

Soubor Global.asax ve výpisu 3 je přesně stejný jako předchozí soubor Global.asax s výjimkou skutečnosti, že místo přípony .mvc používá příponu .aspx. Abyste mohli používat rozšíření .aspx, nemusíte na vzdáleném webovém serveru provádět žádné nastavení.

Vytvoření mapy skriptů se zástupnými znakůmimi

Pokud nechcete upravovat adresy URL aplikace ASP.NET MVC a máte přístup k webovému serveru, máte další možnost. Můžete vytvořit mapu skriptů se zástupnými tvůžete mapovat všechny požadavky na webový server na architekturu ASP.NET. Tímto způsobem můžete použít výchozí ASP.NET směrovací tabulku MVC se službou IIS 7.0 (v klasickém režimu) nebo IIS 6.0.

Mějte na paměti, že tato možnost způsobí, že služba IIS zachytí všechny požadavky na webový server. To zahrnuje požadavky na obrázky, klasické stránky ASP a stránky HTML. Povolení mapy skriptů se zástupnými znakůmi ASP.NET proto má vliv na výkon.

Tady je postup, jak povolit mapu skriptů se zástupným znakem pro službu IIS 7.0:

  1. V okně Připojení vyberte svoji aplikaci.
  2. Ujistěte se, že je vybrané zobrazení Funkce .
  3. Poklikejte na tlačítko Mapování obslužných rutin.
  4. Klikněte na odkaz Přidat mapu skriptů se zástupným znakem (viz obrázek 3).
  5. Zadejte cestu k souboru aspnet_isapi.dll (tuto cestu můžete zkopírovat z mapy skriptu PageHandlerFactory).
  6. Zadejte název MVC.
  7. Klikněte na tlačítko OK .

Snímek obrazovky s oknem Správce Internetové informační služby 7 bod 0, které zobrazuje dialogové okno Přidat mapu skriptů se zástupnými znakůmi

Obrázek 3: Vytvoření mapy se zástupnými skripty pomocí služby IIS 7.0 (Kliknutím zobrazíte obrázek v plné velikosti)

Pomocí následujícího postupu vytvořte mapu se zástupnými skripty se službou IIS 6.0:

  1. Klikněte pravým tlačítkem na web a vyberte Vlastnosti.
  2. Vyberte kartu Domovský adresář .
  3. Klikněte na tlačítko Konfigurace .
  4. Vyberte kartu Mapování.
  5. Klikněte na tlačítko Vložit (viz obrázek 4).
  6. Vložte cestu k aspnet_isapi.dll do pole Spustitelný soubor (tuto cestu můžete zkopírovat z mapy skriptu pro soubory .aspx).
  7. Zrušte zaškrtnutí políčka s popiskem Ověřit, že soubor existuje.
  8. Klikněte na tlačítko OK .

Snímek obrazovky s oknem Internetové informační služby 6 bod 0, které zobrazuje dialogové okno Přidat lomítko Upravit mapování rozšíření aplikace

Obrázek 4: Vytvoření mapy se zástupnými skripty pomocí služby IIS 6.0 (Kliknutím zobrazíte obrázek v plné velikosti)

Po povolení mapování skriptů se zástupnými znaky je potřeba upravit směrovací tabulku v souboru Global.asax tak, aby obsahovala kořenovou trasu. V opačném případě se zobrazí chybová stránka na obrázku 5, když vytvoříte požadavek na kořenovou stránku vaší aplikace. Upravený soubor Global.asax můžete použít ve výpisu 4.

Snímek obrazovky s oknem Microsoft Internet Exploreru, které zobrazuje chybu Chybějící kořenová trasa: Příchozí požadavek neodpovídá žádné trase

Obrázek 5: Chyba chybějící kořenové trasy (kliknutím zobrazíte obrázek v plné velikosti)

Výpis 4 – Global.asax (změněno kořenovou trasou)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

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

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

            routes.MapRoute(
              "Root",
              "",
              new { controller = "Home", action = "Index", id = "" }
            );

        }

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

Po povolení mapy skriptů se zástupnými znaky pro službu IIS 7.0 nebo IIS 6.0 můžete vytvářet požadavky, které pracují s výchozí směrovací tabulkou, které vypadají takto:

/

/Home/Index

/Product/Podrobnosti/3

/Produktu

Souhrn

Cílem tohoto kurzu bylo vysvětlit, jak můžete použít ASP.NET MVC při použití starší verze služby IIS (nebo IIS 7.0 v klasickém režimu). Probrali jsme dvě metody, jak získat ASP.NET Směrování pro práci se staršími verzemi služby IIS: Úprava výchozí směrovací tabulky nebo vytvoření mapy se zástupnými znaky.

První možnost vyžaduje, abyste upravili adresy URL používané v aplikaci ASP.NET MVC. Jednou z velmi podstatných výhod této první možnosti je, že ke změně směrovací tabulky nepotřebujete přístup k webovému serveru. To znamená, že tuto první možnost můžete použít i při hostování aplikace ASP.NET MVC u internetové hostingové společnosti.

Druhou možností je vytvořit mapu skriptů se zástupným znakem. Výhodou této druhé možnosti je, že nemusíte upravovat adresy URL. Nevýhodou této druhé možnosti je, že může ovlivnit výkon aplikace ASP.NET MVC.