Sdílet prostřednictvím


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

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)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

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 zobrazující 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)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}.mvc/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

            routes.MapRoute( _

                "Root", _

                "", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

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 vaše odkazy obsahují příponu .mvc. Pokud ke generování odkazů použijete metodu pomocníka 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. Pokud přidáváte novou příponu sami, ujistěte se, že není zaškrtnuté políčko s popiskem 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 jednu z existujících přípon souborů, které jsou mapovány na ASP.NET rozhraní. 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á příponu .aspx místo přípony .mvc.

Výpis 3 – Global.asax (upraveno s příponami .aspx)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}.aspx/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

            routes.MapRoute( _

                "Root", _

                "", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

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

Vytvoření mapy skriptů se zástupným znakem

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ým znakem, která mapuje všechny požadavky na webový server na rozhraní ASP.NET. Tímto způsobem můžete použít výchozí směrovací tabulku ASP.NET 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. Proto povolení mapování skriptů se zástupným znakem na ASP.NET má vliv na výkon.

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

  1. Vyberte aplikaci v okně Připojení.
  2. Ujistěte se, že je vybrané zobrazení Funkce .
  3. Poklikejte na tlačítko Mapování obslužné rutiny .
  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 7 bod 0 Správce Internetové informační služby, které zobrazuje dialogové okno Přidat mapu skriptů se zástupnými cardy

Obrázek 3: Vytvoření mapy skriptů se zástupnými čáry se službou IIS 7.0 (Kliknutím zobrazíte obrázek v plné velikosti)

Pomocí následujícího postupu vytvořte mapu skriptů se zástupnými činy 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 mapování skriptů pro soubory .aspx).
  7. Zrušte zaškrtnutí políčka s popiskem Ověřte, ž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 skriptů se zástupnými čáry se službou 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 aplikace Microsoft Internet Explorer, 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 (upraveno kořenovou trasou)

Public Class MvcApplication

        Inherits System.Web.HttpApplication 

        Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}") 

            ' MapRoute takes the following parameters, in order:

            ' (1) Route name

            ' (2) URL with parameters

            ' (3) Parameter defaults

            routes.MapRoute( _

                "Default", _

                "{controller}/{action}/{id}", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

            routes.MapRoute( _

                "Root", _

                "", _

                New With {.controller = "Home", .action = "Index", .id = ""} _

            ) 

        End Sub 

        Sub Application_Start()

            RegisterRoutes(RouteTable.Routes)

        End Sub

    End Class

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

/

/Home/Index

/Product/Details/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 skriptů se zástupnými znaky.

První možnost vyžaduje, abyste upravili adresy URL používané v aplikaci ASP.NET MVC. Jednou z velmi důležitý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ými činy. 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.