Partager via


Utilisation d’ASP.NET MVC avec différentes versions d’IIS (VB)

par Microsoft

Dans ce tutoriel, vous allez apprendre à utiliser ASP.NET MVC et le routage d’URL, avec différentes versions d’Internet Information Services. Vous découvrez différentes stratégies pour utiliser ASP.NET MVC avec IIS 7.0 (mode classique), IIS 6.0 et les versions antérieures d’IIS.

L’infrastructure MVC ASP.NET dépend du routage ASP.NET pour acheminer les requêtes du navigateur vers les actions du contrôleur. Pour tirer parti du routage ASP.NET, vous devrez peut-être effectuer des étapes de configuration supplémentaires sur votre serveur web. Tout dépend de la version d’Internet Information Services (IIS) et du mode de traitement des demandes pour votre application.

Voici un résumé des différentes versions d’IIS :

  • IIS 7.0 (mode intégré) : aucune configuration spéciale n’est nécessaire pour utiliser le routage ASP.NET.
  • IIS 7.0 (mode classique) : vous devez effectuer une configuration spéciale pour utiliser le routage ASP.NET.
  • IIS 6.0 ou version antérieure : vous devez effectuer une configuration spéciale pour utiliser le routage ASP.NET.

La dernière version d’IIS est la version 7.5 (sur Win7). IIS 7 d’IIS est inclus dans Windows Server 2008 AND VISTA/SP1 et versions ultérieures. Vous pouvez également installer IIS 7.0 sur n’importe quelle version du système d’exploitation Vista, à l’exception de Home Basic (voir https://technet.microsoft.com/library/cc731179%28WS.10%29.aspx).

IIS 7.0 prend en charge deux modes de traitement des demandes. Vous pouvez utiliser le mode intégré ou le mode classique. Vous n’avez pas besoin d’effectuer des étapes de configuration spéciales lors de l’utilisation d’IIS 7.0 en mode intégré. Toutefois, vous devez effectuer une configuration supplémentaire lors de l’utilisation d’IIS 7.0 en mode classique.

Microsoft Windows Server 2003 inclut IIS 6.0. Vous ne pouvez pas mettre à niveau IIS 6.0 vers IIS 7.0 lorsque vous utilisez le système d’exploitation Windows Server 2003. Vous devez effectuer des étapes de configuration supplémentaires lors de l’utilisation d’IIS 6.0.

Microsoft Windows XP Professionnel inclut IIS 5.1. Vous devez effectuer des étapes de configuration supplémentaires lors de l’utilisation d’IIS 5.1.

Enfin, Microsoft Windows 2000 et Microsoft Windows 2000 Professionnel incluent IIS 5.0. Vous devez effectuer des étapes de configuration supplémentaires lors de l’utilisation d’IIS 5.0.

Mode intégré et mode classique

IIS 7.0 peut traiter les demandes à l’aide de deux modes de traitement des demandes différents : intégré et classique. Le mode intégré offre de meilleures performances et davantage de fonctionnalités. Le mode classique est inclus pour la compatibilité descendante avec les versions antérieures d’IIS.

Le mode de traitement des demandes est déterminé par le pool d’applications. Vous pouvez déterminer le mode de traitement utilisé par une application web particulière en déterminant le pool d’applications associé à l’application. Procédez comme suit :

  1. Lancez le Gestionnaire des services Internet Information Services
  2. Dans la fenêtre Connexions, sélectionnez une application.
  3. Dans la fenêtre Actions, cliquez sur le lien Paramètres de base pour ouvrir la boîte de dialogue Modifier l’application (voir figure 1)
  4. Notez le pool d’applications sélectionné.

Par défaut, IIS est configuré pour prendre en charge deux pools d’applications : DefaultAppPool et Classic .NET AppPool. Si DefaultAppPool est sélectionné, votre application s’exécute en mode de traitement des requêtes intégré. Si Le pool d’applications .NET classique est sélectionné, votre application s’exécute en mode de traitement de requête classique.

Capture d’écran de la boîte de dialogue Modifier l’application, qui montre qu’IIS est configuré pour exécuter l’application en mode de traitement intégré des demandes.

Figure 1 : Détection du mode de traitement des demandes (Cliquer pour afficher l’image en taille réelle)

Notez que vous pouvez modifier le mode de traitement des demandes dans la boîte de dialogue Modifier l’application. Cliquez sur le bouton Sélectionner et modifiez le pool d’applications associé à l’application. Réalisez qu’il existe des problèmes de compatibilité lors de la modification d’une application ASP.NET du mode classique au mode intégré. Pour plus d’informations, consultez les articles suivants :

Si une application ASP.NET utilise defaultAppPool, vous n’avez pas besoin d’effectuer d’étapes supplémentaires pour que le routage ASP.NET (et donc ASP.NET MVC) fonctionne. Toutefois, si l’application ASP.NET est configurée pour utiliser le pool d’applications .NET classique, continuez à lire, vous avez plus de travail à faire.

Utilisation de ASP.NET MVC avec des versions antérieures d’IIS

Si vous devez utiliser ASP.NET MVC avec une version d’IIS antérieure à IIS 7.0, ou si vous devez utiliser IIS 7.0 en mode classique, vous avez deux options. Tout d’abord, vous pouvez modifier la table de routage pour utiliser des extensions de fichier. Par exemple, au lieu de demander une URL telle que /Store/Details, vous devez demander une URL telle que /Store.aspx/Details.

La deuxième option consiste à créer une carte de script générique. Une carte de script générique vous permet de mapper chaque requête dans l’infrastructure ASP.NET.

Si vous n’avez pas accès à votre serveur web (par exemple, votre application ASP.NET MVC est hébergée par un fournisseur de services Internet), vous devez utiliser la première option. Si vous ne souhaitez pas modifier l’apparence de vos URL et que vous avez accès à votre serveur web, vous pouvez utiliser la deuxième option.

Nous explorons chaque option en détail dans les sections suivantes.

Ajout d’extensions à la table de routage

Le moyen le plus simple pour que le routage ASP.NET fonctionne avec des versions antérieures d’IIS consiste à modifier votre table de routage dans le fichier Global.asax. Le fichier Global.asax par défaut et non modifié dans la liste 1 configure une route nommée Route par défaut.

Listing 1 - Global.asax (non modifié)

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

L’itinéraire par défaut configuré dans la liste 1 vous permet de router les URL qui ressemblent à ceci :

/Home/Index

/Product/Details/3

/Produit

Malheureusement, les versions antérieures d’IIS ne transmettront pas ces demandes à l’infrastructure ASP.NET. Par conséquent, ces requêtes ne sont pas routées vers un contrôleur. Par exemple, si vous effectuez une demande de navigateur pour l’URL /Accueil/Index, vous obtenez la page d’erreur dans la figure 2.

Capture d’écran de la fenêtre Microsoft Internet Explorer, qui montre une erreur 404 Introuvable.

Figure 2 : Réception d’une erreur 404 Introuvable (Cliquer pour afficher l’image en taille réelle)

Les versions antérieures d’IIS mappent uniquement certaines requêtes à l’infrastructure ASP.NET. La demande doit concerner une URL avec l’extension de fichier appropriée. Par exemple, une demande pour /SomePage.aspx est mappée à l’infrastructure ASP.NET. Toutefois, une demande pour /SomePage.htm ne le fait pas.

Par conséquent, pour que ASP.NET routage fonctionne, nous devons modifier l’itinéraire par défaut afin qu’il inclue une extension de fichier mappée à l’infrastructure ASP.NET.

Pour ce faire, utilisez un script nommé registermvc.wsf. Il a été inclus dans la version ASP.NET MVC 1 dans C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scripts, mais depuis ASP.NET 2, ce script a été déplacé vers le ASP.NET Futures.

L’exécution de ce script inscrit une nouvelle extension .mvc auprès d’IIS. Après avoir inscrit l’extension .mvc, vous pouvez modifier vos itinéraires dans le fichier Global.asax afin qu’ils utilisent l’extension .mvc.

Le fichier Global.asax modifié dans listing 2 fonctionne avec les versions antérieures d’IIS.

Listing 2 - Global.asax (modifié avec des extensions)

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

Important : n’oubliez pas de recréer votre application ASP.NET MVC après avoir modifié le fichier Global.asax.

Deux modifications importantes ont été apportées au fichier Global.asax dans la liste 2. Il existe maintenant deux itinéraires définis dans global.asax. Le modèle d’URL de l’itinéraire par défaut, le premier itinéraire, se présente maintenant comme suit :

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

L’ajout de l’extension .mvc modifie le type de fichiers interceptés par le module de routage ASP.NET. Avec cette modification, l’application ASP.NET MVC achemine désormais les requêtes comme suit :

/Home.mvc/Index/

/Product.mvc/Details/3

/Product.mvc/

La deuxième route, la route racine, est nouvelle. Ce modèle d’URL pour l’itinéraire racine est une chaîne vide. Cet itinéraire est nécessaire pour la mise en correspondance des demandes effectuées à la racine de votre application. Par exemple, l’itinéraire racine correspond à une requête qui ressemble à ceci :

http://www.YourApplication.com/

Après avoir apporté ces modifications à votre table de routage, vous devez vous assurer que tous les liens dans votre application sont compatibles avec ces nouveaux modèles d’URL. En d’autres termes, assurez-vous que tous vos liens incluent l’extension .mvc. Si vous utilisez la méthode d’assistance Html.ActionLink() pour générer vos liens, vous n’avez pas besoin d’apporter de modifications.

Au lieu d’utiliser le script registermvc.wcf, vous pouvez ajouter une nouvelle extension à IIS qui est mappée manuellement à l’infrastructure ASP.NET. Lorsque vous ajoutez vous-même une nouvelle extension, vérifiez que la case à cocher Vérifier que le fichier existe n’est pas cochée.

Serveur hébergé

Vous n’avez pas toujours accès à votre serveur web. Par exemple, si vous hébergez votre application ASP.NET MVC à l’aide d’un fournisseur d’hébergement Internet, vous n’aurez pas nécessairement accès à IIS.

Dans ce cas, vous devez utiliser l’une des extensions de fichier existantes qui sont mappées à l’infrastructure ASP.NET. Les extensions de fichier mappées à ASP.NET incluent les extensions .aspx, .axd et .ashx.

Par exemple, le fichier Global.asax modifié dans listing 3 utilise l’extension .aspx au lieu de l’extension .mvc.

Listing 3 - Global.asax (modifié avec les extensions .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

Le fichier Global.asax dans listing 3 est exactement le même que le fichier Global.asax précédent, à l’exception du fait qu’il utilise l’extension .aspx au lieu de l’extension .mvc. Vous n’avez pas besoin d’effectuer une configuration sur votre serveur web distant pour utiliser l’extension .aspx.

Création d’une carte de script générique

Si vous ne souhaitez pas modifier les URL de votre application ASP.NET MVC et que vous avez accès à votre serveur web, vous disposez d’une option supplémentaire. Vous pouvez créer un mappage de script générique qui mappe toutes les demandes au serveur web à l’infrastructure ASP.NET. De cette façon, vous pouvez utiliser la table de routage par défaut ASP.NET MVC avec IIS 7.0 (en mode classique) ou IIS 6.0.

N’oubliez pas que cette option permet à IIS d’intercepter chaque requête effectuée sur le serveur web. Cela inclut les demandes d’images, de pages ASP classiques et de pages HTML. Par conséquent, l’activation d’un mappage de script générique sur ASP.NET a des répercussions sur les performances.

Voici comment activer un mappage de script générique pour IIS 7.0 :

  1. Sélectionnez votre application dans la fenêtre Connexions
  2. Vérifiez que la vue Fonctionnalités est sélectionnée
  3. Double-cliquez sur le bouton Mappages de gestionnaires
  4. Cliquez sur le lien Ajouter une carte de script générique (voir la figure 3)
  5. Entrez le chemin d’accès au fichier aspnet_isapi.dll (vous pouvez copier ce chemin à partir du mappage de script PageHandlerFactory)
  6. Entrez le nom MVC
  7. Cliquez sur le bouton OK

Capture d’écran de la fenêtre 7 point 0 du Gestionnaire des services Internet Information Services, qui montre la boîte de dialogue Ajouter une carte de script générique.

Figure 3 : Création d’une carte de script générique avec IIS 7.0 (Cliquez pour afficher l’image en taille réelle)

Procédez comme suit pour créer un mappage de script générique avec IIS 6.0 :

  1. Cliquez avec le bouton droit sur un site web et sélectionnez Propriétés.
  2. Sélectionnez l’onglet Répertoire de base
  3. Cliquez sur le bouton Configuration
  4. Sélectionnez l’onglet Mappages
  5. Cliquez sur le bouton Insérer (voir figure 4)
  6. Collez le chemin d’accès au aspnet_isapi.dll dans le champ Exécutable (vous pouvez copier ce chemin à partir du mappage de script pour les fichiers .aspx)
  7. Décochez la case à cocher Vérifier que le fichier existe
  8. Cliquez sur le bouton OK

Capture d’écran de la fenêtre Internet Information Services 6 point 0, qui montre la boîte de dialogue Ajouter une barre oblique Modifier le mappage d’extension d’application.

Figure 4 : Création d’un mappage de script générique avec IIS 6.0 (Cliquer pour afficher une image en taille réelle)

Après avoir activé les mappages de script génériques, vous devez modifier la table de routage dans le fichier Global.asax afin qu’elle inclue un itinéraire racine. Sinon, vous obtenez la page d’erreur de la figure 5 lorsque vous effectuez une demande pour la page racine de votre application. Vous pouvez utiliser le fichier Global.asax modifié dans la liste 4.

Capture d’écran de la fenêtre Microsoft Internet Explorer, qui montre l’erreur d’itinéraire racine manquant : la requête entrante ne correspond à aucun itinéraire.

Figure 5 : Erreur de routage racine manquante (Cliquez pour afficher l’image en taille réelle)

Listing 4 - Global.asax (modifié avec l’itinéraire racine)

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

Après avoir activé un mappage de script générique pour IIS 7.0 ou IIS 6.0, vous pouvez effectuer des demandes qui fonctionnent avec la table de routage par défaut qui ressemble à ceci :

/

/Home/Index

/Product/Details/3

/Produit

Résumé

L’objectif de ce tutoriel était d’expliquer comment utiliser ASP.NET MVC lorsque vous utilisez une version antérieure d’IIS (ou IIS 7.0 en mode classique). Nous avons abordé deux méthodes pour que le routage ASP.NET fonctionne avec des versions antérieures d’IIS : modifier la table de routage par défaut ou créer un mappage de script générique.

La première option vous oblige à modifier les URL utilisées dans votre application ASP.NET MVC. Un avantage très significatif de cette première option est que vous n’avez pas besoin d’accéder à un serveur web pour modifier la table de routage. Cela signifie que vous pouvez utiliser cette première option même lors de l’hébergement de votre application ASP.NET MVC avec une société d’hébergement Internet.

La deuxième option consiste à créer une carte de script générique. L’avantage de cette deuxième option est que vous n’avez pas besoin de modifier vos URL. L’inconvénient de cette deuxième option est qu’elle peut avoir un impact sur les performances de votre application ASP.NET MVC.