Pergunta

Onde posso encontrar algumas boas indicações sobre as melhores práticas para a execução de ASP.NET MVC no IIS6?

Eu não vi nenhum realista opções para web hosts que fornecem o IIS7-hospedagem ainda.Principalmente porque eu não vivo nos EUA

Então, eu estava pensando sobre como você construir aplicações em ASP.NET MVC e torná-lo facilmente disponíveis para implementar em ambos os IIS6 e IIS7.Tenha em mente que este é para o padrão de web hosts, portanto, não há acesso aos filtros de ISAPI ou configurações especiais dentro do IIS6.

Há uma outra coisa deve pensar quando o desenvolvimento de ASP.NET MVC-aplicativos de destino do IIS6?Todas as funções que não funciona?

ATUALIZAÇÃO:Um dos maiores problemas é a coisa com rotas.O padrão {controller}/{action} irá funcionar no IIS7, mas não IIS6 que precisa de {controller}.mvc/{action}.Então, como faço para tornar isso transparente?Novamente, não ISAPI e não IIS-definições, por favor.

Foi útil?

Solução

Demorei um pouco, mas eu descobri como fazer as extensões de trabalhar com o IIS 6.Primeiro, você precisa refazer a base de roteamento para incluir .aspx, para que eles serão encaminhadas através de ASP.NET filtro de ISAPI.

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

Se você navegar para Casa.aspx, por exemplo, seu site deverá estar a funcionar bem.Mas O Padrão.aspx e o padrão de endereço da página do http://[site]/ parar de funcionar corretamente.Então, como é que fixo?

Bem, você precisa definir uma segunda rota.Infelizmente, a utilização de Padrão.aspx, como a rota não funcionar corretamente:

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

Então, como fazer para chegar a este trabalho?Bem, isso é onde você precisa original código de roteamento:

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

Quando você fizer isso, Padrão.aspx e http://[site]/ ambos começam a trabalhar novamente, porque eu acho que eles se tornam com êxito mapeado de volta para a Casa do controlador.Assim, a solução completa é:

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

E o seu site deve começar a trabalhar apenas a multa, de acordo com o IIS 6.(Pelo menos no meu PC).

E como um bônus, se você estiver usando o Html.ActionLink() em suas páginas, você não deve ter que alterar qualquer outra linha de código, durante todo o site.Este método cuida adequadamente de marcação no .aspx extensão para o controlador.

Outras dicas

Desde que você não pode modificar as configurações do IIS para mapear .mvc para ASP.Net, você pode usar uma extensão diferente do que já está mapeada para ASP.Net.Por exemplo, você pode usar {controller}.ashx/{action} e ele deve funcionar fora da caixa no IIS 6.

Você não tem que viver com essa extensão, se você pode instalar um filtro ISAPI no servidor.

Basicamente, você percurso de correspondência de urls para a {controller}.mvc variedade, em seguida, em ASP.NET você reescrever esta url para a remover .mvc -- fazendo isso, você não precisa definir qualquer extra rotas ou expor .mvc para o seu blog.

Eu já escrevi sobre isso aqui:http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

e Steve Sanderson tem uma boa postar aqui também: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

Como mencionado neste post de blog por Phil Hack, é possível configurar as URLs sem extensão para ASP.NET MVC no IIS 6 usando os mapeamentos de aplicativo curinga:

  1. No IIS 6, vá para a Aplicação de Propriedades de Configuração para o seu ASP.NET MVC web application.
  2. Clique em "Inserir" no aplicativo Curinga seção mapas.
  3. Defina o Executável para o caminho do aspnet_isapi.dll (na minha máquina esta é c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll).
  4. Certifique-se de NÃO marque a opção "Verificar se o arquivo existe" e clique em "OK".

No entanto, como também mencionado por Hack, existem algumas implicações de desempenho de fazer isso.

Com o IIS6 você pode fazer uma de duas coisas:

  1. A instalação de um filtro de ISAPI para o mapa MVC URLs para ASP.NET
  2. Inclua uma extensão no URL.Por exemplo:htp://localhost/Home.mvc

Desde a opção 1 não está disponível na maioria dos web hosts, você tem que ir para o número 2.

A regravação de Url podem ajudar você a resolver o problema.Eu tenho solução implementada, permitindo implantar o aplicativo MVC em qualquer versão do IIS, mesmo quando hospedagem virtual é usado.http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx

Eu tenho um exemplo de aplicação no IIS6.

Eu encontrei rápida e suja solução.(Sujo, pois ele contém o modo de exibição padrão de nome com a extensão) É não precisar de mais de rota, ou qualquer coisa de especial.(Exceto, sua rota padrão deve {controller}.aspx/{action}...formato)

Aqui o padrão.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>

Meu exemplo de aplicações de ação padrão foi de índice, no diretório Home.

Nota :Eu vi esse código em Phil Haack do blog.Graças a Brian Lowe.

Eu tenho um detalhado passo a passo, mas isso requer que você use isapi_rewrite.Ver em: http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top