the run net asp application .net asp.net-mvc deployment iis-6

.net - application - run asp net core on iis



ASP.NET MVC en IIS6 (8)

¿Dónde puedo encontrar algunos buenos consejos sobre las mejores prácticas para ejecutar ASP.NET MVC en IIS6?

Todavía no he visto ninguna opción realista para los servidores web que ofrezcan alojamiento IIS7. Principalmente porque no vivo en los Estados Unidos

Así que me preguntaba cómo construir mejor las aplicaciones en ASP.NET MVC y que esté fácilmente disponible para su implementación tanto en IIS6 como en IIS7. Tenga en cuenta que esto es para hosts web estándar, por lo que no hay acceso a filtros ISAPI o configuraciones especiales dentro de IIS6.

¿Hay algo más en lo que uno debería pensar al desarrollar aplicaciones ASP.NET MVC para apuntar a IIS6? ¿Alguna función que no funciona?

ACTUALIZACIÓN: Uno de los problemas más grandes es el problema con las rutas. El patrón {controller} / {action} funcionará en IIS7, pero no en IIS6, que necesita {controller} .mvc / {action}. Entonces, ¿cómo hago que esto sea transparente? De nuevo, no hay ISAPI ni configuración de IIS , por favor.


Con IIS6 puede hacer una de estas dos cosas:

  1. Configure un filtro ISAPI para asignar URL MVC a ASP.NET
  2. Incluye una extensión en la URL . Por ejemplo: htp: //localhost/Home.mvc

Como la opción 1 no está disponible en la mayoría de los servidores web, debe buscar el número 2.


No tiene que vivir con esa extensión si puede instalar un filtro ISAPI en el servidor.

Básicamente, enrutas urls coincidentes a la variedad {controller} .mvc, luego en ASP.NET reescribes esta url para eliminar .mvc; al hacerlo, no tienes que definir rutas adicionales ni exponer .mvc a tus usuarios.

He escrito sobre esto aquí: http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

y Steve Sanderson tiene una buena publicación aquí también: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/


Como no puede modificar la configuración de IIS para asignar .mvc a ASP.Net, puede usar una extensión diferente que ya está asignada a ASP.Net. Por ejemplo, podría usar {controller} .ashx / {action} y debería funcionar de inmediato en IIS 6.



Me tomó un poco, pero descubrí cómo hacer que las extensiones funcionen con IIS 6. Primero, debe volver a trabajar el enrutamiento base para incluir .aspx para que se enruten a través del filtro ISAPI de ASP.NET.

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

Si navega a Home.aspx, por ejemplo, su sitio debería funcionar correctamente. Pero Default.aspx y la dirección de página predeterminada de http: // [sitio web] / dejan de funcionar correctamente. Entonces, ¿cómo es eso arreglado?

Bueno, necesitas definir una segunda ruta. Lamentablemente, al usar Default.aspx ya que la ruta no funciona correctamente:

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

Entonces, ¿cómo haces que esto funcione? Bueno, aquí es donde necesitas el código de enrutamiento original:

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

Cuando hace esto, Default.aspx y http: // [sitio web] / ambos comienzan a funcionar nuevamente, creo que se vuelven a asignar al controlador Home. Entonces la solución completa es:

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

Y su sitio debería comenzar a funcionar bien bajo IIS 6. (Al menos lo hace en mi PC).

Y como beneficio adicional, si usa Html.ActionLink () en sus páginas, no debería tener que cambiar ninguna otra línea de código en todo el sitio. Este método se encarga de etiquetar correctamente la extensión .aspx del controlador.


Como mencioné en esta publicación de blog de Phil Hack, es posible configurar URLs sin extensión para ASP.NET MVC en IIS 6 usando mapeos de aplicaciones de comodines :

  1. En IIS 6, vaya a Propiedades de configuración de la aplicación para su aplicación web ASP.NET MVC.
  2. Haga clic en "Insertar ..." en la sección de mapas de la aplicación Comodín.
  3. Establezca el archivo ejecutable en la ruta de aspnet_isapi.dll (en mi equipo esto es c: / windows / microsoft.net / framework / v2.0.50727 / aspnet_isapi.dll).
  4. Asegúrese de NO marcar la casilla "Verificar que el archivo exista" y haga clic en "Aceptar".

Sin embargo, como también se menciona por Hack, hay algunas implicaciones de rendimiento de hacer esto.



Tengo una aplicación de muestra en IIS6.

Encontré una solución rápida y sucia. (Sucio, porque contiene un nombre de vista predeterminado con extensión) No requiere una ruta adicional ni nada especial. (Excepto que su ruta predeterminada debe tener el formato {controller} .aspx / {action} ...)

Aquí el default.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>

Mi acción predeterminada de las aplicaciones de muestra fue index, en el directorio de inicio.

Nota: Vi este código en el blog de Phil Haack. Gracias a Brian Lowe.