OwinStartup no disparando

350

Tuve el código de configuración OwinStartup funcionando perfectamente y luego dejó de funcionar. Desafortunadamente, no estoy seguro de qué hice exactamente para que deje de funcionar y me está costando mucho descubrirlo.

Para asegurarme de que tengo lo básico cubierto, hice una doble verificación para asegurarme de que tengo

[assembly:OwinStartup(typeof(WebApplication.Startup))] 

atributo asignado correctamente y me aseguré de que no tengo una aplicación Configuración para owin: AutomaticAppStartup que se establece en falso, por lo que hice que un conjunto sea verdadero para estar seguro ya que no había nada allí antes.

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

También intenté llamar específicamente a la aplicación

<add key="owin:appStartup" value="WebApplication.Startup" />

Antes de que dejara de funcionar, actualicé los paquetes Microsoft.Owin.Security NuGet a 2.0.2, así que intenté revertirlos a 2.0.1 (eso fue un dolor) pero no cambió nada. Tengo WebActivator instalado en el proyecto y lo estoy usando para arrancar otras cosas, pero lo he probado en una nueva plantilla de WebApplication y funciona allí, así que no creo que sea el culpable.

También intenté eliminar mi clase de inicio y usar Visual Studio para agregar una nueva usando el tipo de clase de inicio OWIN en Agregar nuevo elemento y eso tampoco se llama. Luego intenté agregar una segunda clase de Inicio, ya que sé que arrojará una excepción si hay más de un atributo OwinStartup definido, pero no arroja ninguna excepción allí.

No estoy seguro de qué más probar. ¿Alguna idea?

Actualizar

Resulta que Resharper eliminó la referencia a Microsoft.Owin.Host.SystemWeb cuando lo usé para eliminar referencias no utilizadas.

Jeff Treuting
fuente
37
¿Tiene instalado el paquete Microsoft.Owin.Host.Systemweb en esta aplicación? ¿Asegúrate de que este dll también sea parte de la carpeta bin?
Praburaj
1
Eso fue todo. Muchas gracias. Creo que lo que sucedió es que usé Resharper para eliminar referencias no utilizadas en algún momento y no creo que sea necesario. Si quieres poner esto como respuesta, definitivamente lo marcaré como la solución. Gracias por la ayuda.
Jeff Treuting
2
Jeff, ReSharper eliminó la referencia "no utilizada" a Microsoft.Owin.Host.Systemweb. ¿Estás hablando de la declaración "usar"? ¿En qué archivo, Startup.cs?
vkelman
44
Tuve exactamente el mismo problema, resharper eliminó la referencia a Microsoft.Owin.Host.SystemWeb. Lo arreglé abriendo la ventana de la consola del Administrador de paquetes en Visual Studio y ejecutando el siguiente comando PM> Update-Package -reinstall Microsoft.Owin.Host.SystemWeb
Joe King
1
Como una actualización del comentario de @ JoeKing arriba. PM Console no se actualizará como "No encontrado". Tuve que ir para una reinstalación. PM> Install-Package Microsoft.Owin.Host.SystemWeb
Morvael

Respuestas:

768

Asegúrese de haber instalado el Microsoft.Owin.Host.SystemWebpaquete en el proyecto. Este paquete es necesario para la detección de inicio en aplicaciones alojadas en IIS. Para obtener más información, puede consultar este artículo .

Praburaj
fuente
44
¿Cómo podría alguien iniciar la detección de inicio de Owin mediante programación dentro de una biblioteca de encapsulación consumida / propia, suponiendo que tengamos un lugar para llamarla ( método de inicio de aplicación ), sin requerir estas referencias directas del material Microsoft.Owin? ¿Cómo provocamos específicamente a Katana para que llame Startup.Configuration(IAppBuilder)?
Jason Kleban
77
Intentando crear una aplicación desde cero, sin usar la plantilla MVC. Esto terminó 2 horas de desesperación.
mkvlrn
1
Justo cuando estaba gritando Resharper es el mayor asesino de productividad. Tuve este problema y no pude entender por una semana por qué la API web dejó de funcionar. Otro comprobador de pruebas está matando mi productividad.
Ivan G.
55
¡Requerir que haga referencia a una biblioteca que realmente no se usa durante la compilación es un mal diseño de Microsoft! Resharper está haciendo todo lo posible, pero no hay arma contra esas malas decisiones.
ps_ttf
22
Asombroso. Cada vez que agrego un archivo de inicio OWIN tengo este problema. Y cada vez que olvido por qué, y termino con esta respuesta.
Tobias
70

Si ha actualizado desde una versión anterior de MVC, asegúrese de no tener

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

en su web.config. Suprimirá la llamada a la lógica de inicio.

En cambio cámbielo a true

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

Me doy cuenta de que ya mencionaste esto, pero a veces las personas (como yo) no leen toda la pregunta y simplemente saltan a las respuestas ...

En algún momento, cuando actualicé a MVC 5, esto se agregó y nunca lo vi hasta hoy.

Simon_Weaver
fuente
Tuve el mismo problema al implementar una clase de inicio Owin en un antiguo proyecto mvc. Cambiar el valor hizo el truco!
Darxtar
Esto funciona para mí Gracias
Ghanshyam Singh
51

Respuesta alternativa al problema original discutido: Owin "no dispara". En mi caso, pasé horas pensando que no estaba disparando debido a que no podía establecer un punto de interrupción.

Al depurar el inicio de OWIN en Visual Studio

  • IIS Express: la ejecución de "F5" se romperá en el código de inicio de OWIN

  • IIS: la ejecución de "F5" no se interrumpirá hasta que se cargue el código OWIN (y global.asax). Si se conecta a W3P.exe, podrá acceder a él.

Aaron Sherman
fuente
2
¡tienes razón! Es solo el depurador de Visual Studio 2013 que no se detiene en un punto de interrupción dentro de la clase de inicio, mientras se ejecuta bajo IIS local. Extraño.
vkelman
44
¿Puede elaborar sobre el 'adjuntar a W3P.exe'? Tengo el mismo problema de que el punto de interrupción no se ve afectado por IIS pero sí por IISExpress. Detuve la aplicación, la adjunté a w3wp.exe y luego busqué en mi host local, pero aún así no está siendo afectada. ¿Me he perdido algo?
Sean
Tampoco puedo adjuntarme a una instancia en ejecución de mi aplicación, aunque creo que pude hacerlo antes. Traté de abrir una aplicación en un navegador, luego en VS2013 para usar "Debug-> Attach to Process", y luego volver a cargar una página en un navegador. VS no se detuvo. Sé que OWIN Startup se está ejecutando: puse un poco de inicio de sesión en él para fines de depuración. Es como en una época oscura de impresiones de depuración intermedias.
vkelman
2
un compañero de trabajo me mostró que en iis si hace doble clic en el grupo de aplicaciones predeterminado y cambia el modo de canalización administrado a clásico, el depurador se romperá en el inicio. Corrí después de eso y recibí un error que decía que la aplicación tenía que ejecutarse en Integrated, así que tuve que volver a cambiarla, pero al menos pude ver que se estaba rompiendo allí.
Matt Bodily
Hay un par de cosas aquí. "w3wp.exe" se basa en el grupo de aplicaciones. debería poder depurar global.asax y owin si su aplicación no es la primera aplicación que solicita que inicia ese proceso. es decir, solicite una aplicación diferente en el grupo de aplicaciones, "Adjuntar a w3wp.exe", y luego solicite la aplicación que intenta depurar.
Brett Caswell el
26

Si tiene problemas para depurar el código en la Startupclase, también tuve este problema, o pensé que sí. El código se estaba disparando, pero creo que sucede antes de que el depurador se haya conectado, por lo que no puede establecer puntos de interrupción en el código y ver qué está sucediendo.

Puede probar esto lanzando una excepción en el Configurationmétodo de la Startupclase.

Remotec
fuente
Esto es exactamente lo que está sucediendo. ¿Hay alguna solución para que la clase de inicio se active después de que se haya conectado el depurador?
Tom Schreck
¿Puedo saber cómo lanzar una excepción en el método de configuración?
Karthikeyan
1
Se agregó esta línea a Startup.cs para demostrar que se ejecutó: System.IO.File.WriteAllText (@ "c: \ temp \ startup.txt", "Started");
RaoulRubin
1
@Karthikeyan - Agregue esta línea después de antes (no importa) ConifureAuth (aplicación); línea - lanzar nueva Excepción ("Hola");
Francis Rodgers
Haga la primera línea System.Threading.Sleep (10_000) para que espere lo suficiente para que el depurador se conecte antes de continuar (ajuste según sea necesario)
James Gray
16

CONSEJOS DE DEPURACIÓN

Si la depuración no funciona, intente usar IIS Express o pruebe el siguiente método para IIS local

Usando IIS local

Por alguna razón, este método permite la depuración de este método:

  1. Solicitar una página web
  2. Adjuntar al proceso w3wp.exe
  3. Toca el archivo web.config
  4. Solicitar una página web

Propina extra

Tal vez hacer esto vaciará un caché:

  1. En web.config agregue el atributo OptimizeCompilations con un valor falso

    <compilation debug = "true" ... optimizarCompilations = "false">

  2. Ejecutar sitio

  3. Deshacer el cambio en web.config
Rasmus
fuente
2
alternar la configuración optimizeCompilations="false"me funciona
barsh
¡Me salvas el día! OptimizeCompilations = "false" funciona para mí.
Vostrugin
OptimizeCompilations me salvó el día. Gracias :)
Bogdan Stojanovic
13

Tuve un problema similar a esto y la eliminación de los archivos temporales de ASP.NET lo solucionó. Espero que esto ayude a alguien.

randomsolutions
fuente
44
Solo como referencia, aquí hay otra respuesta que proporciona un poco más de detalles sobre dónde se almacenan estos archivos: stackoverflow.com/questions/16137457/…
Sam Storie
1
Ejecuto IIS EXPRESS y la ventana 8: eliminar aquí: C: \ Users \ Your User Name \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ vs
Grey Wolf el
Gracias, noté esta respuesta porque tuve un error antes de este, sobre algo bloqueando un archivo en la carpeta Archivos temporales de ASP.NET
Elger Mensonides
Estuve luchando con esto durante 1 día entero y finalmente esto funcionó para mí. Después de borrar el Temporary ASP.NET Filescontenido de la carpeta y el inicio de Owin fue invocado.
Harsh Baid
11

Yo tuve el mismo problema. Se instaló el paquete Microsoft.Owin.Host.SystemWeb pero durante la instalación NuGet no pudo agregar el dll como referencia por alguna razón. Asegúrese de que su proyecto tenga esa referencia. Si no, puede intentar reinstalar:

update-package Microsoft.Owin.Host.SystemWeb -reinstall

Tuve un error como el siguiente al reinstalar, pero de alguna manera funcionó:

Llamada del sistema fallida. (Excepción de HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))

Ufuk Hacıoğulları
fuente
He estado luchando contra esto por un tiempo, y esto es lo que solucionó mi problema. Tenía la referencia nuget en packages.config, pero mi csproj no tenía la referencia.
Zackary Geers
1
En mi caso, no tenía el paquete instalado en absoluto. La ejecución del paquete de instalación Microsoft.Owin.Host.SystemWeb resolvió mi problema. Gracias por la pista.
J. Horn
2

En mi caso, el grupo de aplicaciones IIS no se configuró en v4. Fue v2.

Cambió el AppPool a v4 y todo estuvo bien.

Lobo gris
fuente
2

Tuve el mismo problema cuando agregué Owin a un proyecto web existente. Finalmente encontré que el problema se debía a lo siguiente en el archivo web.config.

<assemblies>
  <remove assembly="*" />
  <add assembly="System.Web.Mvc" />
  <add assembly="System.Web.WebPages" />

   ...

</assemblies>

Remove assembly = "*" estaba causando el problema. Cuando elimino esta línea, se ejecutó el código de inicio de Owin. Finalmente lo cambio a lo siguiente y funcionó perfectamente

<assemblies>
  <remove assembly="*" />
  <add assembly="Microsoft.Owin.Host.SystemWeb" />
  <add assembly="System.Web.Mvc" />
  <add assembly="System.Web.WebPages" />
  <add assembly="System.Web.Helpers" />
...
</assemblies>
James Rapson
fuente
1
Tenía un proyecto de sitecore y en mi archivo web.config, no había ninguna etiqueta <remove assembling = * "/>. Pero agregar <add assembly =" Microsoft.Owin.Host.SystemWeb "/> solucionó mi problema.
burki
Gracias @burki, por tu comentario, me obligué a probar esta solución y ¡también funcionó para nosotros! La clase de inicio de Owin no se activó desde la actualización de VS a 15.9.9.
David
¡Muchas gracias! esto lo solucionó, tuve que agregar lo siguiente: <ensamblajes> <eliminar ensamblaje = "*" /> <agregar ensamblaje = "myapplication" /> <agregar ensamblaje = "Microsoft.Owin.Host.SystemWeb" /> <agregar ensamblaje = "Microsoft.Owin.Security" /> <agregar ensamblaje = "System.Web.Mvc" /> <agregar ensamblaje = "System.Web.WebPages" /> <agregar ensamblaje = "System.Web.Helpers" /> < / montajes>
trykyn
1

En mi caso, alguien cambia la ruta de salida de mi sitio web, el IIS Express incluso no carga OWIN y la clase de configuración no se verá afectada, por supuesto. Después de configurar la ruta de salida como "bin \", funciona bien.

Sean Song
fuente
1

En mi caso, este paquete Microsoft.Owin.Host.SystemWeb está presente en el proyecto.

Pero debajo de dos etiquetas no están presentes en web.config.

<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:appStartup" value="namespace.className.methodName" />

después de agregarlos funciona sin problemas.

TEJIDO
fuente
1

En mi caso, mi web.config tenía

<authorization>
  <allow users="?" />
</authorization>

Para obligarlo a volver a Owin, necesitaba que fuera

<authorization>
  <deny users="*" />
</authorization>
sirdank
fuente
0

Me equivoqué con muchas de las sugerencias en esta publicación.

Tenía lo siguiente pero aún no podía aterrizar en un punto de quiebre. Lanzar una excepción demostró que se estaba ingresando el código.

<appSettings>
...
  <add key="owin:AutomaticAppStartup" value="true" />
  <add key="owin:appStartup" value="SSOResource.Startup, SSOResource" />
...
</appSettings>

Finalmente, por desesperación, miré proyecto-> propiedades, y luego, en la sección WEB, también marqué la casilla de verificación CÓDIGO NATIVO (ASP.NET ya debería estar marcado).

Eso finalmente lo arregló para mí.

Nota: Estoy usando Visual Studio 2017 Professional.

Anthony De Souza
fuente
0

No estoy seguro de si esto aún ayudará a alguien, pero he hecho todas las soluciones anteriores (y de algunas otras publicaciones) en vano.

Lo que solucionó el problema de mi parte fue poner una barra diagonal inversa al final del valor de RedirectUri en web.config (¡loco, lo sé!). RedirectUri es un parámetro en UseOpenIdConnectAuthentication.

Entonces, en lugar de:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home" />

Hacer esto:

<add key="ida:RedirectUri" value="https://www.bogussite.com/home/" />

Y actualizó la URL de respuesta en la configuración de la aplicación de Azure también.

Eso de alguna manera hizo que el Inicio se ejecute como se esperaba (probablemente borró algo de caché), y los puntos de interrupción ahora se disparan.

FYI. Estaba modelando mi código desde aquí: https://github.com/microsoftgraph/aspnet-connect-sample

niki b
fuente
0

Después de convertir una biblioteca de clase en un Proyecto de Aplicación Web , me encontré con esto y me volví terco. Resultó que en mi .csProjarchivo tenía esto:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <Optimize>false</Optimize>
  <OutputPath>bin\Debug\</OutputPath>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <DebugType>pdbonly</DebugType>
  <Optimize>true</Optimize>
  <OutputPath>bin\Release\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <ErrorReport>prompt</ErrorReport>
  <WarningLevel>4</WarningLevel>
</PropertyGroup>
  • construyendo así los diversos dll en una subcarpeta de la carpeta bin (que ifc. no funcionará). La solución fue cambiar ambos contenidos de texto por OutputPathsolo bin\.
Frederik Struck-Schøning
fuente
0

Para mí fue porque no están en el mismo espacio de nombres. Después de eliminar mi AppStart de "project.Startup.AppStart" y dejar que Startup.cs y Startup.Auth.cs con el espacio de nombres "project.Startup", todo volvió a funcionar perfectamente.

Espero que sea de ayuda!

Fábio Carvalho
fuente
0

Si está viendo este problema con el alojamiento IIS, pero no cuando se está depurando F5, intente crear una nueva aplicación en IIS.

Esto me lo arregló. (Windows 10) Al final eliminé la aplicación IIS "incorrecta" y volví a crear una idéntica con el mismo nombre.

pmb5
fuente
0

Creo que lo que algunas personas intentaban llegar arriba es que si desea hacer que su servidor OWIN "cobre vida" programáticamente, estaría llamando a algo como esto:

using Microsoft.Owin.Hosting;

    IDisposable _server = WebApp.Start<StartupMethod>("http://+:5000"); 
              // Start Accepting HTTP via all interfaces on port 5000

Una vez que realice esta llamada, verá la llamada a StartupMethod () activada en el depurador

JoeHz
fuente
0

Esto funcionó para mí:

agregar modo de autenticación = "Ninguno"

<system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <httpRuntime targetFramework="4.6.1" />
      <authentication mode="None" /><!--Use OWIN-->
  </system.web>
Andrew Gale
fuente
-3

Primero agregue la clase de autenticación OWIN y luego habilite la clave OWIN: AutomaticAppStartup en su web.config como Ahora disparará

Venkatesh Prabu
fuente