Utiliser ASP.NET MVC avec différentes versions de IIS
Date de publication : 23 avril 2009
Par
Pascal ROZE (Traduction) (Page perso de lutecefalco) (Blog)
Dans ce tutoriel, vous allez apprendre comment utiliser ASP.NET MVC, et le routage d'urls, avec différentes versions de IIS. Vous allez apprendre différentes
stratégies pour utiliser le framework ASP.NET MVC avec IIS7.0 (en mode classique), IIS6.0 et les versions précédentes de IIS.
Traduction
Utiliser le ASP.NET MVC avec différentes versions de IIS
Mode intégré contre mode classique
Utiliser ASP.NET MVC avec des versions antérieures de IIS
Ajouter des extensions à la table de routage
Serveur hébergé
Créer un Wildcard Script Map
Résumé
Traduction
Utiliser le ASP.NET MVC avec différentes versions de IIS
Le framework ASP.NET MVC dépend du routage ASP.NET pour router les requêtes provenant du navigateur vers les actions du controleur. Dans le but de tirer profit
du routage ASP.NET, vous serez peut-être amené à modifier la configuration de votre serveur web. En fait, tout dépend de la version de votre IIS et de la façon
dont votre application gère les requêtes.
Voici un résumé des différentes versions de IIS:
- IIS 7.0 (monde intégré) - Aucune configuration spéciale n'est nécessaire pour utiliser le routage ASP.NET
- IIS 7.0 (mode classique) - Vous devez effectuer quelques modifications sur la configuration pour utiliser le routage ASP.NET
- IIS 6.0 ou moins - Vous devez effectuer quelques modifications sur la configuration pour utiliser le routage ASP.NET
La dernière version de IIS est la version 7.0. Cette version de IIS est incluse dans Windows Server 2008. Vous pouvez également installer IIS 7.0 sur n'importe
quelle version de Vista, à l'exception de la version Familiale Basique (voir http://technet.microsoft.com/en-us/library/cc732624.aspx)
IIS 7.0 supporte 2 modes de traitement des requêtes. Vous pouvez utilisez le mode intégré ou le mode classique. Vous n'avez pas besoin procéder à certaines
modifications de la configuration si vous utilisez IIS 7.0 en mode intégré. Cependant, vous devez le faire si vous utilisez IIS 7.0 en mode classique.
Microsoft Windows Server 2003 contientIIS 6.0. Vous ne pouvez pas installer IIS 7.0 sur un Windows Server 2003. Vous devez procéder à certaines modifications de
la configuration si vous utilisez IIS 6.0.
Microsoft Windows XP Professionnal contient IIS 5.1. Vous devez procéder à certaines modifications de la configuration si vous utilisez IIS 5.1.
Pour finir, Microsoft Windows 2000 et Microsoft Windows 2000 Professional contiennent IIS 5.0. Vous devez procéder à certaines modifications de la configuration
si vous utilisez IIS 5.0.
Mode intégré contre mode classique
IIS 7.0 peut traiter les requêtes en utilisant 2 modes différents: le mode intégré et le mode classique. Le mode intégré est plus performant et fournit plus de
fonctionnalités. Le mode classique est inclus afin d'assurerla retro compatibilité avec les versions antérieures de IIS.
Le mode de traitement des requêtes est déterminé par le pool applicatif. Vous pouvez spécifier quel mode de traitement est utilisé par une application web donnée
en spécifiant le pool associé à cette application. Pour cela:
1. Lancez Internet Information Services Manager
2. Dans la fenêtre Connections, sélectionnez une application
3. Dans la fenêtre Actions, cliquez sur le lien Basics Settings pour ouvrir la fenêtre de dialogue Edit Application (voir figure 1)
4. Notez le pool applicatif sélectionné.
Par défaut, IIS est configuré pour supporter 2 pools applicatifs: DefaultAppPool et Classic .NET AppPool. Si DefaultAppPool est sélectionné, alors votre
application tourne en mode de traitement des requêtes intégré. Si Classic .NET AppPool est sélectionné, votre application tourne en mode de traitement des
requêtes classique.

Figure 1: Détecter le mode de traitement des requêtes
Si une application ASP.NET utilise le DefaultAppPool, alors vous n'avez pas besoin d'effectuer de modifications pour faire fonctionner le routage ASP.NET (et
donc ASP.NET MVC). Mais si une application ASP.NET est configurée pour utiliser le Classic .NET AppPool, vous aurez plus de travail de configuration à faire.
Utiliser ASP.NET MVC avec des versions antérieures de IIS
Si vous avez besoin d'utiliser ASP.NET MVC avec une version de IIS antérieure à la 7.0, ou si vous avez besoin d'utiliser IIS 7.0 en mode classique, alors vous
avez 2 options. Premièrement, vous pouvez modifier la table de routage pour utiliser les extensions de fichier. Par exemple, au lieu de requêter une url comme
/Store/Details, vous pourriez requêter une url comme /Store.aspx/Details.
La seconde option est de créer ce que l'on appelle un wildcard script map. Un wildcard script map vous permet d'envoyer chaque requête vers le framework ASP.NET.
Si vous n'avez pas accès à votre serveur web (par exemple, votre application ASP.NET MVC est hebergée pour un fournisseur d'accès) alors vous aurez besoin
d'utiliser la première option. Si vous ne voulez pas modifier l'apparence de vos urls, et que vous avez accès à votre serveur web, alors vous devez utiliser la
seconde.
Nous allons explorer chacune de ces options dans les sections suivantes.
Ajouter des extensions à la table de routage
La façon la plus simple de faire fonctionner le routage ASP.NET avec les versions plus anciennes de IIS est de modifier votre table de routage dans le fichier
global.asax. Le fichier global.asax par défaut et non modifié du Listing 1 configure une unique route appelée la route Default.
| Listing 1 – Global.asax |
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",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
|
La route Default configurée dans Listing 1 vous permet de router des urls telles que:
/Home/Index
/Products/Details/3
/Product
Malheureusement, les versions plus anciennes de IIS ne passent pas ces requêtes au framework ASP.NET. Cependant, ces requêtes ne seront pas routées vers un
controleur. Par exemple, si vous faites une requête avec l'url /Home/Index, vous aurez l'erreur suivante:

Figure 2. Erreur 404, page non trouvée
Les versions plus anciennes de IIS mappent seulement certaines requêtes vers le framework ASP.NET. La requête doit être une url avec une extension de fichier
correcte. Par exemple, une requête sur /SomePage.aspx sera mappée vers le framework ASP.NET. Alors qu'une requête sur /SomePage.html ne le sera pas.
Par conséquent, pour faire fonctionner le routage ASP.NET, nous devons modifier la route Default de manière à ce qu'elle inclus une extension de fichier qui est
mappée sur le framework ASP.NET.
Quand vous installez le framework ASP.NET MVC, un script nommé registermvc.wsf est ajouté au dossier suivant:
C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scripts
L'exécution de ce script enregistera une nouvelle extension .mvc dans IIS. Après cela, vous pouvez modifier vos routes dans le fichier global.asax de façon à ce qu'elles utilisent l'extension .mvc.
Le fichier global.asax modifié dans Listing 2 fonctionne avec les versions plus anciennes de IIS.
| Listing 2 - Global.asax (modifié avec les extensions) |
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);
}
}
}
|
 |
Important: n'oubliez pas de recompiler votre application ASP.NET MVC après chaque modification du fichier Global.asax
|
Il y a deux changements importants dans le fichier Global.asax du Listing 2. Il y a maintenant 2 routes définies dans le
Global.asax. Le modèle d'url pour la route Default, la première route, ressemble maintenant à:
{controller}.mvc/{action}/{id}
L'ajout de l'extension .mvc change le type de fichier que le module de routage ASP.NET intercepte. Avec
ce changement, l'application ASP.NET MVC va maintenant router des requêtes telles que:
/Home.mvc/Index/
/Product.mvc/Details/3
/Product.mvc/
La seconde route, la route Root, est nouvelle. Le modèle d'url pour la route Root est une chaine de
caractères vide. Cette route est nécessaire pour intercepter les requêtes faites sur la racine de votre
application. Par exemple, la route va intercepter une requête telle que:
http://www.YourApplication.com
Après avoir ces modifications sur votre table de routage, vous allez devoir vous assurer que tous les liens
de votre application sont compatibles avec ces nouveaux modèles d'url. En d'autres mots, vous assurer que
tous les liens contiennent l'extension .mvc. Si vous utilisez la méthode helper Html.ActionLink() pour générer
vos liens, alors vous n'aurez à faire aucun changement.
 |
Au lieu d'utiliser le script registermvc.wcf, vous pouvez ajouter manuellement une nouvelle extension à IIS
qui sera mappée sur le framework ASP.NET. Lorsque vous ajoutez une nouvelle extension par vous-même, assurez-vous
que la case à cocher nommée Verify that file exists n'est pas cochée.
|
Serveur hébergé
Vous n'aurez pas toujours accès à votre serveur web. Si, par exemple, vous hébergez votre application
ASP.NET MVC en passant par un hébergeur, alors vous n'aurez pas nécessairement accès à IIS.
Dans ce cas, vous devriez utiliser une des extensions qui sont mappées sur le framework ASP.NET, telles que
les extensions .aspx, .axd et.ashx.
Par exemple, le fichier Global.asax du Listing 3 utilise l'extension .aspx au lieu de l'extension .mvc.
| Listing 3 - Global.asax (modifié avec les extensions .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);
}
}
}
|
Le fichier Global.asax du Listing 3 est exactement le même que le précédent, à l'exception du fait qu'il
utilise l'extension .aspx à la place de l'extension .mvc. Vous n'avez ainsi pas besoin de configurer votre
serveur web distant pour utiliser l'extension .aspx.
Créer un Wildcard Script Map
Si vous ne voulez pas modifier les urls pour votre application ASP.NET MVC, et si vous avez accès à
votre serveur web, alors vous une option supplémentaire. Vous pouvez créer un wildcard script map qui
mappera toutes les requêtes sur le serveur web sur le framework ASP.NET. Ainsi, vous pouvez utiliser la
la table de routage d'ASP.NET MVC par défaut de IIS 7.0 (en mode classique) ou IIS 6.0.
Soyez bien conscient que cette option implique que IIS interceptera toutes les requêtes envoyées au
serveur web. Cela inclut les requêtes pour des images, des pages ASP classiques et les pages HTML. Par
conséquent, activer un wilcard script map sur ASP.NET aura des implications en terme de performance.
Voici comment activer un wildcard script map pour IIS 7.0:
1. Sélectionnez votre application dans la fenêtre Connections
2. Assurez vous que la vue Features est sélectionnée
3. Double-cliquez sur le bouton Handler mappings
4. Cliquez sur lien Add Wildcard Script Map (figure 3)
5. Entrez le chemin du fichier aspnet_isapi.dll (vous pouvez copier ce chemin depuis le PageHandlerFactory script map
6. Entrez le nom MVC
7. Cliquez sur le bouton OK

Figure 3: Créer un wildcard script map avec IIS 7.0
Suivant les étapes suivantes pour créer un wildcard script map avec IIS 6.0:
1. Cliquez droit sur un site web et sélectionnez Properties
2. Sélectionnez l'onglet Home Directory
3. Cliquez sur le bouton Configuration
4. Cliquez sur le bouton Insert (Figure 4)
5. Collez le chemin du fichier aspnet_isapi.dll dans le champ Executable
6. Décochez la case Verify that file exists
7. Cliquez sur le bouton OK

Figure 4: Créer un wildcard script map avec IIS 6.0
Après avoir activé les wildcard script maps, vous devez modifier la table de routage dans le fichier
Global.asax de façon à inclure une route Root. Sinon, vous obtiendrez l'erreur suivante (figure 5) quand
vous ferez une requête sur la page racine de votre application. Vous pouvez utiliser le fichier Global.asax
du Listing 4.

Figure 5: Erreur lorsque la route Root est manquante
| Listing 4 - Global.asax (modifié avec la route Root) |
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);
}
}
}
|
Après avoir activé un wildcard script map pour IIS 7.0 ou IIS 6.0, vous pouvez faire des requêtes,
qui fonctionnent avec la table de routage par défaut, telles que:
/
/Home/Index
/Product/Details/3
/Product
Résumé
Le but de ce tutoriel était de vous expliquer comment utiliser ASP.NET MVC avec une version antérieure de IIS (ou avec IIS 7.0
en mode classique). Nous avons discuté de deux méthodes pour faire fonctionner le routage d'ASP.NET avec les versions antérieures
de IIS: modifier la table de routage ou créer un wildcard script map.
La première option nécessite que vous modifiez les urls utilisées dans votre application ASP.NET MVC. Un des avantages de cette
première option est que vous n'avez pas besoin d'avoir accès à votre serveur web pour modifier la table de routage. Cela
signifie que vous pouvez utiliser cette première option même si vous passez par un hébergeur pour votre application ASP.NET MVC.
La seconde option est de créer un wildcard script map. L'avantage de cette seconde option est que vous n'avez pas besoin de
modifier vos urls. Le désavantage de cette option est que cela a un impact négatif sur les performances de votre application
ASP.NET MVC.


Copyright ©
2009
Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans
de prison et jusqu'à 300 000 € de dommages et intérêts.
Cette page est déposée.