OwinStartup non si attiva


350

Ho avuto il codice di configurazione OwinStartup perfettamente funzionante e poi ha smesso di funzionare. Sfortunatamente non sono sicuro di cosa ho fatto per farlo smettere di funzionare e non riesco davvero a capirlo.

Per essere sicuro di avere le basi coperte, ho raddoppiato il controllo per assicurarsi che io abbia

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

attributo assegnato correttamente e assicurato che non ho un'appSetting per owin: AutomaticAppStartup impostato su false, quindi ne ho creato uno impostato su true per essere sicuro poiché prima non c'era nulla.

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

Ho anche provato a richiamare in modo specifico l'app

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

Prima che smettesse di funzionare ho aggiornato i pacchetti NuGet Microsoft.Owin.Security a 2.0.2, quindi ho provato a ripristinarli a 2.0.1 (è stato un problema) ma non ha cambiato nulla. Ho WebActivator installato sul progetto e lo sto usando per avviare altre cose, ma l'ho provato su un nuovo modello di WebApplication e funziona lì, quindi non credo che sia il colpevole.

Ho anche provato a rimuovere la mia classe di avvio e utilizzare Visual Studio per aggiungerne uno nuovo usando il tipo di classe di avvio OWIN in Aggiungi nuovo elemento e che non viene nemmeno chiamato. Successivamente ho provato ad aggiungere una seconda classe di avvio poiché so che genererà un'eccezione se è stato definito più di un attributo OwinStartup, ma non genera alcuna eccezione.

Non sono sicuro di cos'altro provare. qualche idea?

Aggiornare

Risulta che Resharper ha rimosso il riferimento a Microsoft.Owin.Host.SystemWeb quando l'ho usato per rimuovere riferimenti inutilizzati.


37
Hai il pacchetto Microsoft.Owin.Host.Systemweb installato in questa applicazione. Assicurarsi che questa dll faccia anche parte della cartella bin?
Praburaj,

1
Questo è stato. Grazie mille. Penso che sia successo che ho usato Resharper per rimuovere i riferimenti inutilizzati ad un certo punto e non pensa che sia necessario. Se vuoi mettere questo come una risposta, lo segnerò sicuramente come soluzione. Grazie per l'aiuto.
Jeff Treuting,

2
Jeff, ReSharper ha rimosso il riferimento "non utilizzato" a Microsoft.Owin.Host.Systemweb - stai parlando dell'istruzione "using"? In quale file, Startup.cs?
vkelman,

4
Ho avuto esattamente lo stesso problema, il resharper ha rimosso il riferimento a Microsoft.Owin.Host.SystemWeb. L'ho risolto aprendo la finestra della console di Package Manager in Visual Studio ed eseguendo il seguente comando PM> Update-Package -reinstall Microsoft.Owin.Host.SystemWeb
Joe King

1
Come aggiornamento al commento di @ JoeKing sopra. PM Console non si aggiorna come "Non trovato". Ho dovuto fare una reinstallazione. PM> Pacchetto di installazione Microsoft.Owin.Host.SystemWeb
Morvael,

Risposte:


768

Assicurati di aver installato il Microsoft.Owin.Host.SystemWebpacchetto nel progetto. Questo pacchetto è necessario per il rilevamento dell'avvio nelle applicazioni ospitate in IIS. Per ulteriori informazioni è possibile fare riferimento a questo articolo .


4
Come si può dare il via all'avvio di Owin Startup Detection in una libreria consumata / che incapsula owin, supponendo che abbiamo un posto per chiamarla ( PreApplicationStartMethod ), senza richiedere questi riferimenti diretti della roba Microsoft.Owin? Come induciamo specificamente Katana a chiamare Startup.Configuration(IAppBuilder)?
Jason Kleban,

7
Tentativo di creare un'applicazione da zero, senza utilizzare il modello MVC. Questo è finito 2 ore di disperazione.
mkvlrn,

1
Proprio quando stavo urlando resharper è stato il più grande killer della produttività che ho avuto questo problema e non sono riuscito a capire per una settimana perché l'API Web ha smesso di funzionare. Un'altra dimostrazione di resharper sta uccidendo la mia produttività.
Ivan G.

5
La necessità di fare riferimento a una libreria che non è realmente utilizzata durante la compilazione è un cattivo progetto di Microsoft! Resharper sta facendo del suo meglio ma non esiste un'arma contro decisioni così sbagliate.
ps_ttf,

22
Sorprendente. Ogni volta che aggiungo un file di avvio OWIN ho questo problema. E ogni volta che dimentico il perché, e finisco con questa risposta.
Tobias,

70

Se hai eseguito l'aggiornamento da una versione MVC precedente, assicurati di non averlo

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

nel tuo web.config. Sopprimerà il richiamo della logica di avvio.

Invece cambiarlo in true

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

Mi rendo conto che lo hai già menzionato, ma a volte le persone (come me) non leggono l'intera domanda e saltano alle risposte ...

Da qualche parte lungo la linea - quando ho eseguito l'aggiornamento a MVC 5 questo è stato aggiunto e non l'ho mai visto fino ad oggi.


Aveva lo stesso problema durante l'implementazione di una classe di avvio Owin in un vecchio progetto mvc. Il cambio di valore ha funzionato!
Darxtar,

Questo funziona per me Grazie
Ghanshyam Singh,

51

Risposta alternativa al problema originale discusso: Owin "non spara". Nel mio caso, ho passato ore a pensare che non sparasse perché non ero in grado di stabilire un punto di interruzione.

Quando si esegue il debug di avvio OWIN in Visual Studio

  • IIS Express: l'esecuzione di "F5" interromperà il codice di avvio OWIN

  • IIS - L'esecuzione di "F5" non si interromperà fino al caricamento del codice OWIN (e global.asax). Se ti colleghi a W3P.exe sarai in grado di intervenire.


2
hai ragione! È solo il debugger di Visual Studio 2013 che non si ferma su un punto di interruzione all'interno della classe Startup - mentre è in esecuzione su IIS locale. Strano.
vkelman,

4
Puoi approfondire il 'attach to W3P.exe'? Ho lo stesso problema del breakpoint che non viene colpito con IIS ma viene colpito con IISExpress. Ho interrotto l'applicazione, collegato a w3wp.exe e quindi passato al mio localhost ma non è stato ancora colpito. Ho perso qualcosa?
Sean,

Non riesco nemmeno a collegarmi a un'istanza in esecuzione della mia app, anche se credo di essere stato in grado di farlo prima. Ho provato ad aprire un'app in un browser, quindi in VS2013 per utilizzare "Debug-> Connetti a processo" e quindi per ricaricare una pagina in un browser. VS non si è fermato. So che OWIN Startup è in esecuzione: ho inserito un po 'di login per scopi di debug. È come tornare in un'era buia con stampe di debug intermedie.
vkelman,

2
un collega mi ha appena mostrato che in IIS, se fai doppio clic sul pool di app predefinito e cambi la modalità della pipeline gestita alla classica, il debugger si interromperà all'avvio. Ho eseguito dopo quello e ho ricevuto un errore che diceva che l'applicazione doveva essere eseguita in Integrato, quindi ho dovuto cambiarlo di nuovo, ma sono stato almeno in grado di vedere che si stava rompendo lì.
Matt Bodily,

Ci sono un paio di cose qui. "w3wp.exe" si basa sul pool di applicazioni. dovresti essere in grado di eseguire il debug di global.asax e owin se la tua applicazione non è la prima richiesta su cui si avvia quel processo. vale a dire richiedere un'applicazione diversa nel pool di applicazioni, "Allega a w3wp.exe" e quindi richiedere l'applicazione che sta tentando di eseguire il debug.
Brett Caswell,

26

Se riscontri problemi nel debug del codice nella Startupclasse, ho riscontrato anche questo problema - o pensavo di averlo fatto. Il codice è stato attivato ma credo che accada prima che il debugger sia collegato, quindi non è possibile impostare punti di interruzione sul codice e vedere cosa sta succedendo.

Puoi dimostrarlo lanciando un'eccezione nel Configurationmetodo della Startupclasse.


questo è esattamente ciò che sta accadendo. Esiste una soluzione per far scattare la classe Startup dopo aver collegato il debugger?
Tom Schreck,

Posso sapere come generare un'eccezione nel metodo di configurazione?
Karthikeyan,

1
Aggiunta questa riga a Startup.cs per dimostrare che è stata eseguita: System.IO.File.WriteAllText (@ "c: \ temp \ startup.txt", "Started");
RaoulRubin,

1
@Karthikeyan - Aggiungi questa riga dopo di prima (non importa) ConifureAuth (app); line - lancia nuova eccezione ("Hello");
Francis Rodgers,

Crea la prima riga System.Threading.Sleep (10_000) in modo che attenda il debugger prima di continuare (aggiustalo secondo necessità)
James Gray,

16

SUGGERIMENTI PER IL DEBUGGING

Se il debug non funziona, provare a utilizzare IIS Express o provare il metodo seguente per IIS locale

Utilizzando IIS locale

Per qualche motivo questo metodo consente il debug di questo metodo:

  1. Richiedi una pagina web
  2. Collegarsi al processo w3wp.exe
  3. Tocca il file web.config
  4. Richiedi una pagina web

Suggerimento extra

Forse facendo questo svuoti una cache:

  1. In web.config aggiungi l'attributo optimCompilations con un valore falso

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

  2. Esegui sito

  3. Annulla la modifica in web.config

2
commutare l'impostazione optimizeCompilations="false"funziona per me
escluso il

Mi salvi la giornata! optimCompilations = "false" funziona per me.
Vostrugin,

optimCompilations mi ha salvato la giornata. Grazie :)
Bogdan Stojanovic,

13

Ho avuto un problema simile a questo e cancellando i file temporanei ASP.NET è stato risolto. Spero che questo aiuti qualcuno.


4
Solo per riferimento, ecco un'altra risposta che fornisce un po 'più di dettaglio su dove sono archiviati questi file: stackoverflow.com/questions/16137457/…
Sam Storie,

1
Eseguendo IIS EXPRESS e la finestra 8: elimina qui: C: \ Utenti \ Nome utente \ AppData \ Local \ Temp \ File temporanei ASP.NET \ vs
Grey Wolf

Grazie, ho notato questa risposta perché avevo avuto un errore prima di questo, riguardo a qualcosa che bloccava un file nella cartella dei file temporanei ASP.NET
Elger Mensonides

Ho lottato con questo per 1 giorno intero e alla fine ha funzionato per me. Dopo aver cancellato il Temporary ASP.NET Filescontenuto della cartella e viene avviata l'avvio di Owin.
Harsh Baid

11

Ho avuto lo stesso problema. Il pacchetto Microsoft.Owin.Host.SystemWeb è stato installato ma durante l'installazione NuGet non è stato in grado di aggiungere la dll come riferimento per qualche motivo. Assicurati che il tuo progetto abbia quel riferimento. Altrimenti puoi provare a reinstallare:

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

Ho riscontrato un errore come quello riportato di seguito durante la reinstallazione ma in qualche modo ha funzionato:

Chiamata di sistema non riuscita. (Eccezione da HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))


Ho combattuto per un po ', e questo è ciò che ha risolto il mio problema. Ho avuto il riferimento nuget in pacchetti.config, ma il mio csproj non aveva il riferimento.
Zackary Geers,

1
Nel mio caso, non avevo affatto installato il pacchetto. L'esecuzione del pacchetto di installazione Microsoft.Owin.Host.SystemWeb ha risolto il mio problema. Grazie per il suggerimento.
J. Horn,

2

Nel mio caso, il pool di applicazioni IIS non era impostato su v4. Era v2.

Ho cambiato AppPool in v4 e tutto è andato bene.


2

Ho avuto lo stesso problema quando ho aggiunto Owin a un progetto Web esistente. Alla fine ho scoperto che il problema era dovuto a quanto segue nel file web.config.

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

   ...

</assemblies>

Remove assembly = "*" stava causando il problema. Quando rimuovo questa riga viene eseguito il codice di avvio Owin. Alla fine lo cambio nel modo seguente e ha funzionato perfettamente

<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>

1
Avevo un progetto sitecore e nel mio file web.config non c'era il tag <remove assembly = * "/>. Ma l'aggiunta di <add assembly =" Microsoft.Owin.Host.SystemWeb "/> ha risolto il mio problema.
Burki

Grazie @burki, a causa del tuo commento, mi sono costretto a provare questa soluzione e ha funzionato anche per noi! La classe di avvio Owin non è stata attivata dall'aggiornamento di VS al 15.9.9.
David

grazie mille! risolto il problema, ho dovuto aggiungere il seguente: <assemblies> <remove assembly = "*" /> <add assembly = "myapplication" /> <add assembly = "Microsoft.Owin.Host.SystemWeb" /> <aggiungi assembly = "Microsoft.Owin.Security" /> <add assembly = "System.Web.Mvc" /> <add assembly = "System.Web.WebPages" /> <add assembly = "System.Web.Helpers" /> < / assembly>
trykyn,

1

Nel mio caso, il percorso di output del mio sito Web viene modificato da qualcuno, anche IIS Express non carica OWIN e la classe di installazione non verrà colpita, ovviamente. Dopo aver impostato il percorso di output come "bin \", funziona bene.


1

Nel mio caso questo pacchetto Microsoft.Owin.Host.SystemWeb è presente nel progetto.

Ma sotto due tag non sono presenti in web.config.

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

dopo averli aggiunti funziona senza problemi.


1

Nel mio caso, il mio web.config aveva

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

Per costringerlo a ricadere su Owin, avevo bisogno che lo fosse

<authorization>
  <deny users="*" />
</authorization>

0

Ho pasticciato con molti suggerimenti su questo post.

Avevo quanto segue ma non riuscivo ancora ad atterrare su un punto di rottura. Il lancio di un'eccezione ha dimostrato che il codice veniva inserito.

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

Finalmente per disperazione ho guardato project-> properties, e poi nella sezione WEB ho anche controllato la casella di controllo CODICE NATIVO (ASP.NET dovrebbe essere già spuntato).

Questo finalmente risolto il problema per me.

Nota: sto usando Visual Studio 2017 Professional.


0

Non sono sicuro se questo aiuterà ancora qualcuno, ma ho fatto tutte le soluzioni sopra (e da alcuni altri post) senza risultati.

Ciò che risolveva il problema da parte mia era mettere una barra rovesciata alla fine del valore RedirectUri in web.config (pazzo, lo so!). RedirectUri è un parametro in UseOpenIdConnectAuthentication.

Quindi, invece di:

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

Fai questo:

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

E aggiornato anche l'URL di risposta nelle impostazioni dell'app di Azure.

Che in qualche modo ha fatto funzionare Startup come previsto (probabilmente ha svuotato un po 'di cache) e ora i punti di interruzione si stanno attivando.

FYI. Stavo modellando il mio codice da qui: https://github.com/microsoftgraph/aspnet-connect-sample


0

Dopo aver convertito una libreria di classi in un progetto di applicazione Web , mi sono imbattuto in questo e sono diventato testardo. Si è scoperto, nel mio .csProjfile, ho avuto questo:

<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>
  • costruendo così le varie DLL in una sottocartella della cartella bin (che ifc. non funzionerà). La soluzione è stata quella di cambiare entrambi i contenuti del testo OutputPathin solo bin\.

0

Per me è stato perché non si trovano nello stesso spazio dei nomi. Dopo aver rimosso la mia AppStart da "project.Startup.AppStart" e aver lasciato entrambi Startup.cs e Startup.Auth.cs con lo spazio dei nomi "project.Startup", tutto è tornato a funzionare perfettamente.

Spero sia di aiuto!


0

Se riscontri questo problema con l'hosting IIS, ma non durante il debug F5, prova a creare una nuova applicazione in IIS.

Questo mi ha risolto. (windows 10) Alla fine ho eliminato l'applicazione IIS "errata" e ne ho ricreata una identica con lo stesso nome.


0

Penso che alcune persone stessero cercando di arrivare sopra è che se vuoi rendere programmaticamente il tuo server OWIN "prendere vita", chiameresti qualcosa del genere:

using Microsoft.Owin.Hosting;

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

Una volta effettuata questa chiamata, nel debugger verrà visualizzata la chiamata a StartupMethod ()



0

Questo ha funzionato per me:

aggiungi autenticazione mode = "Nessuno"

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

-3

Aggiungere prima la classe di autenticazione OWIN e quindi abilitare OWIN: AutomaticAppStartup chiave nel tuo web.config come Ora sparerà

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.