owinstartup mvc example automaticappstartup c# iis owin

c# - mvc - ¿Cómo hacer que IIS reconozca la clase de inicio de OWIN?



owin startup webforms (4)

  1. Asegúrese de que su grupo de aplicaciones esté en modo integrado v4.0.
  2. Asegúrate de haber colocado el contenedor Microsoft.Owin.Host.SystemWeb (veo que lo has instalado). Solo asegúrate de que esté también en la carpeta bin.

asp.net/aspnet/overview/owin-and-katana/… tendrá más información sobre cómo se ejecuta un middleware OWIN en Integrated pipeline.

Mi servicio web OWIN funciona maravillosamente en Visual Studio 2013, pero cuando lo publico en un sitio IIS real, actúa como si el método de configuración en la clase de inicio no se hubiera ejecutado. Puedo hacer cosas "normales" como navegar a la aplicación y ver la estructura del directorio, pero nada que supuestamente se configuró con IAppBuilder es funcional. Por ejemplo, recibo un error 404.0 cuando navego a una URL configurada en Inicio para emitir un token de portador OAuth2. Es como si nunca se hubiera ejecutado la configuración de inicio (aplicación IAppBuilder).

Estoy utilizando el [assembly: OwinStartup(typeof(MyNamespacedStartupClass))] para designar la clase de inicio.

He usado NuGet para obtener Microsoft.Owin.Host.SystemWeb y Microsoft.Owin.Diagnostics según las instrucciones que he visto, pero eso no hace la diferencia.

¿Qué más tengo que hacer?


También me enfrenté a los mismos problemas cuando migré mi sitio MVC5 ya en funcionamiento a un nuevo servidor. Me dio pesadillas, solo para recapitular, tuve que hacer todo esto para que funcione

  1. Agregue [assembly: OwinStartupAttribute(typeof([YourAssemblyName].Startup))] a la clase de inicio (después de las instrucciones de uso y antes de la declaración del espacio de nombres)
  2. Agregue estas claves a la sección <appSettings> de web.config

    <add key="owin:AppStartup" value="[NamespaceForYourStartUpClass].Startup, [YourAssemblyName]" /> <add key="owin:AutomaticAppStartup" value="true" />

  3. Y por último, como sugiere Martijn Evens, agregue lo siguiente a la sección <system.webserver> en web.config

    <modules runAllManagedModulesForAllRequests="true" />


También tuve que agregar una configuración adicional a mi web.config

<configuration> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer> </configuration>

De: https://katanaproject.codeplex.com/wikipage?title=Static%20Files%20on%20IIS

IIS tiene un módulo de archivo estático nativo que se optimiza para omitir otras partes de la interconexión si ve rutas de archivos que no coinciden con otros controladores (p. Ej., No aspx). Esto significa que es probable que el middleware del navegador de directorios funcione, pero luego el middleware de archivos estáticos puede pasarse por alto en favor del módulo de archivos estáticos nativos.

Esto le dice a IIS que no omita los módulos administrados de Asp.Net, incluso si el módulo de archivo estático nativo cree que tiene una coincidencia.

También describe otro paso, pero esto no fue necesario para mí:

Además, agregue el siguiente marcador de etapa DESPUÉS de su middleware de archivos estáticos (en el espacio de nombres Microsoft.Owin.Extensions): app.UseStageMarker (PipelineStage.MapHandler);


Probablemente la razón por la que actualizaste en algún momento desde un MVC antiguo:

Asegúrate de no tener

<add key="owin:AutomaticAppStartup" value="false" />

en su web.config . Suprimirá llamar al inicio

En lugar de cambiarlo a este

<add key="owin:AutomaticAppStartup" value="true" />

En algún momento a lo largo de la línea, cuando me actualicé a MVC 5, esto se agregó (de hecho, casi irónicamente, fue hace un año, mañana) y nunca supe lo que era hasta hoy cuando traté de usarlo.