Question

Où puis-je trouver de bons conseils sur les meilleures pratiques pour l'exécution de ASP.NET MVC sur IIS6?

Je n'ai pas vu d'options réalistes pour les hôtes web qui fournissent des IIS7 d'hébergement encore.Surtout parce que je ne vis pas aux états-UNIS

Donc, je me demandais comment vous les meilleures créer des applications dans ASP.NET MVC et de les rendre facilement accessibles à déployer sur les deux IIS6 et IIS7.Gardez à l'esprit que c'est pour web standard hôtes, alors il n'y a pas d'accès à ISAPI-filtres ou des réglages spécifiques à l'intérieur de IIS6.

Sont-il autre chose que l'on devrait réfléchir lors de l'élaboration de ASP.NET MVC-applications à la cible IIS6?Toutes les fonctions qui ne fonctionne pas?

Mise à JOUR:L'un des plus gros problèmes est la chose avec des itinéraires.Le modèle {controller}/{action} va travailler sur IIS7, mais pas IIS6 qui doit {controller}.mvc/{action}.Alors, comment dois-je faire de cette transparence?Encore une fois, pas de ISAPI et pas de IIS-paramètres, s'il vous plaît.

Était-ce utile?

La solution

Il m'a fallu un peu, mais j'ai compris comment faire les extensions de travailler avec IIS 6.Tout d'abord, vous avez besoin de retravailler la base de routage à inclure .aspx, de sorte qu'ils seront acheminés par le biais de la ASP.NET filtre ISAPI.

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

Si vous accédez à la Maison.aspx, par exemple, votre site doit être fonctionne bien.Mais Par Défaut.aspx et la page par défaut de l'adresse de http://[site web]/ cesser de fonctionner correctement.Alors comment est-il fixé?

Eh bien, vous avez besoin de définir un deuxième itinéraire.Malheureusement, en utilisant par Défaut.aspx tant que la route ne fonctionne pas correctement:

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

Alors, comment obtenez-vous ce travail?Eh bien, c'est où vous avez besoin de l'original du code de routage:

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

Lorsque vous faites cela, par Défaut.aspx et http://[site web]/ les deux commencer à travailler à nouveau, je pense que parce qu'ils sont correctement mappé de retour à la Maison contrôleur.Donc la solution complète est:

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);
    }
}

Et votre site doit commencer à travailler à l'amende juste sous IIS 6.(Au moins, il n'sur mon PC.)

Et en bonus, si vous êtes à l'aide de Html.ActionLink() dans vos pages, vous ne devriez pas avoir à changer une ligne de code tout au long de l'ensemble du site.Cette méthode prend soin de marquage sur le .aspx extension du contrôleur.

Autres conseils

Puisque vous ne pouvez pas modifier les paramètres IIS à la carte .mvc ASP.Net, vous pouvez utiliser une autre extension qui est déjà mappé à ASP.Net.Par exemple, vous pouvez utiliser {controller}.ashx/{action} et cela devrait fonctionner hors de la boîte sur IIS 6.

Vous n'avez pas à vivre avec cette extension si vous pouvez installer un filtre ISAPI sur le serveur.

Fondamentalement, vous route correspondait url de l' {controller}.mvc variété, puis dans ASP.NET vous réécrivez cette url à supprimer .mvc -- en faisant cela, vous n'avez pas à définir quel supplément de routes ou de les exposer .mvc pour vos utilisateurs.

J'ai écrit à ce sujet ici:http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

et Steve Sanderson a un bon poste ici: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

Comme mentionné dans la présente post de blog par Phil Hack, il est possible de configurer l'extension moins Url pour ASP.NET MVC dans IIS 6 à l'aide de générique mappages d'application:

  1. Dans IIS 6, accédez à l'Application des Propriétés de Configuration pour votre ASP.NET application web MVC.
  2. Cliquez sur "Insérer..." dans le Générique des cartes d'application de la section.
  3. Définir le fichier Exécutable sur le chemin de l'aspnet_isapi.dll (sur ma machine c'est c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll).
  4. Assurez-vous de ne PAS cocher la case "Vérifier l'existence du fichier" et cliquez sur "OK".

Cependant, comme l'a également mentionné Hack, il y a quelques implications sur les performances de le faire.

Avec IIS6 vous pouvez faire une des deux choses:

  1. L'installation d'un filtre ISAPI à la carte MVC Url d'ASP.NET
  2. Inclure une extension dans l'URL.Par exemple:htp://localhost/Home.mvc

Étant donné que l'option 1 n'est pas disponible sur la plupart des web-hôtes, vous devez aller pour le numéro 2.

La réécriture d'Url peuvent vous aider à résoudre le problème.J'ai mis en place une solution permettant de déployer l'application MVC, à tout IIS version, même lorsque l'hébergement virtuel est utilisé.http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx

J'ai un exemple d'application sur IIS6.

Je l'ai trouvé simple et rapide de la solution.(Sale, parce qu'il contient par défaut le nom de la vue avec l'extension), Il n'exige pas d'autre route, ou quelque chose de spécial.(Sauf, votre route par défaut doit {controller}.aspx/{action}...format)

Ici, la valeur par défaut.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>

Mes exemples d'applications à l'action par défaut est l'indice, dans le répertoire Home.

Note :J'ai vu ce code à Phil Haack blog.Merci à Brian Lowe.

J'ai une explication détaillée étape par guide pas à pas, mais il nécessite l'utilisation de isapi_rewrite.Afficher en: http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top