OwinStartup wird nicht ausgelöst

350

Ich hatte den OwinStartup-Konfigurationscode einwandfrei und dann funktionierte er nicht mehr. Leider bin ich mir nicht sicher, was ich genau getan habe, damit es nicht mehr funktioniert, und es fällt mir wirklich schwer, es herauszufinden.

Um sicherzustellen, dass ich die Grundlagen abgedeckt habe, habe ich doppelt überprüft, um sicherzustellen, dass ich die habe

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

Das Attribut wurde ordnungsgemäß zugewiesen und es wurde sichergestellt, dass ich keine App-Einstellung für owin: AutomaticAppStartup habe, die auf false festgelegt ist. Daher habe ich aus Sicherheitsgründen eine Einstellung auf true festgelegt, da zuvor nichts vorhanden war.

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

Ich habe auch versucht, die AppSetting speziell aufzurufen:

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

Bevor es nicht mehr funktionierte, habe ich die Microsoft.Owin.Security NuGet-Pakete auf 2.0.2 aktualisiert, also habe ich versucht, sie auf 2.0.1 zurückzusetzen (das war ein Schmerz), aber es hat nichts geändert. Ich habe WebActivator im Projekt installiert und verwende es, um andere Dinge zu booten, aber ich habe das auf einer neuen WebApplication-Vorlage getestet und es funktioniert dort, sodass ich nicht denke, dass dies der Schuldige ist.

Ich habe auch versucht, meine Startup-Klasse zu entfernen und mithilfe von Visual Studio eine neue Klasse mit dem Typ OWIN Startup Class unter Add New Item hinzuzufügen, und das wird auch nicht aufgerufen. Als nächstes habe ich versucht, eine zweite Startup-Klasse hinzuzufügen, da ich weiß, dass sie eine Ausnahme auslöst, wenn mehr als ein OwinStartup-Attribut definiert ist, aber dort keine Ausnahme auslöst.

Ich bin mir nicht sicher, was ich sonst noch versuchen soll. Irgendwelche Gedanken?

Aktualisieren

Es stellt sich heraus, dass Resharper den Verweis auf Microsoft.Owin.Host.SystemWeb entfernt hat, als ich ihn zum Entfernen nicht verwendeter Verweise verwendet habe.

Jeff Treuting
quelle
37
Haben Sie das Microsoft.Owin.Host.Systemweb-Paket in dieser Anwendung installiert? Stellen Sie sicher, dass diese DLL auch Teil des Ordners bin ist?
Praburaj
1
Das war's. Vielen Dank. Ich denke, was passiert ist, ist, dass ich Resharper verwendet habe, um nicht verwendete Referenzen irgendwann zu entfernen, und es glaubt nicht, dass eine benötigt wird. Wenn Sie dies als Antwort setzen möchten, werde ich es definitiv als Lösung markieren. Danke für die Hilfe.
Jeff Treuting
2
Jeff, ReSharper hat den "nicht verwendeten" Verweis auf Microsoft.Owin.Host.Systemweb entfernt. Sprechen Sie über die Anweisung "using"? In welcher Datei ist Startup.cs?
Vkelman
4
Ich hatte genau das gleiche Problem, resharper entfernte den Verweis auf Microsoft.Owin.Host.SystemWeb. Ich habe es behoben, indem ich das Package Manager-Konsolenfenster in Visual Studio geöffnet und den folgenden Befehl PM> Update-Package -reinstall Microsoft.Owin.Host.SystemWeb
Joe King
1
Als Update zu @ JoeKings Kommentar oben. Die PM-Konsole wurde nicht als "Nicht gefunden" aktualisiert. Ich musste mich neu installieren. PM>
Installationspaket

Antworten:

768

Stellen Sie sicher, dass Sie das Microsoft.Owin.Host.SystemWebPaket im Projekt installiert haben . Dieses Paket wird für die Starterkennung in von IIS gehosteten Anwendungen benötigt. Weitere Informationen finden Sie in diesem Artikel .

Praburaj
quelle
4
Wie könnte jemand die Owin-Starterkennung programmgesteuert in einer verbrauchten / owin-kapselnden Bibliothek starten, vorausgesetzt, wir haben einen Ort, an dem sie aufgerufen werden kann ( PreApplicationStartMethod ), ohne diese direkten Verweise auf das Microsoft.Owin- Material zu benötigen? Wie provozieren wir speziell Katana, um anzurufen Startup.Configuration(IAppBuilder)?
Jason Kleban
7
Versuch, eine Anwendung von Grund auf neu zu erstellen, ohne die MVC-Vorlage zu verwenden. Dies endete 2 Stunden Verzweiflung.
mkvlrn
1
Gerade als ich Resharper rief, war dies der größte Produktivitätskiller. Ich hatte dieses Problem und konnte eine Woche lang nicht herausfinden, warum die Web-API nicht mehr funktioniert. Ein weiterer Beweis für eine Nachschärfung ist die Beeinträchtigung meiner Produktivität.
Ivan G.
5
Das Verweisen auf eine Bibliothek, die beim Kompilieren nicht wirklich verwendet wird, ist ein schlechtes Design von Microsoft! Resharper gibt sein Bestes, aber es gibt keine Waffe gegen solch schlechte Entscheidungen.
ps_ttf
22
Tolle. Jedes Mal, wenn ich eine OWIN-Startdatei hinzufüge, tritt dieses Problem auf. Und jedes Mal vergesse ich warum und komme zu dieser Antwort.
Tobias
70

Wenn Sie ein Upgrade von einer älteren MVC-Version durchgeführt haben, stellen Sie sicher, dass Sie keine haben

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

in deinem web.config. Der Aufruf der Startlogik wird unterdrückt.

Ändern Sie es stattdessen in true

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

Mir ist klar, dass Sie dies bereits erwähnt haben, aber manchmal lesen Leute (wie ich) nicht die ganze Frage und springen einfach zu den Antworten ...

Irgendwo auf der Strecke - als ich auf MVC 5 upgegradet habe, wurde dies hinzugefügt und ich habe es bis heute nie gesehen.

Simon_Weaver
quelle
Hatte das gleiche Problem bei der Implementierung einer Owin-Startklasse in einem alten MVC-Projekt. Das Umschalten des Wertes hat es geschafft!
Darxtar
Das funktioniert bei mir Danke
Ghanshyam Singh
51

Alternative Antwort auf das ursprünglich diskutierte Problem - Owin "feuert nicht". In meinem Fall habe ich stundenlang gedacht, dass es nicht ausgelöst wird, weil ich keinen Haltepunkt darin setzen kann.

Beim Debuggen des OWIN-Starts in Visual Studio

  • IIS Express - Wenn Sie "F5" ausführen, wird der OWIN-Startcode unterbrochen

  • IIS - Das Ausführen von "F5" wird erst unterbrochen, nachdem OWIN-Code (und global.asax-Code) geladen wurden. Wenn Sie eine Verbindung zu W3P.exe herstellen, können Sie darauf zugreifen.

Aaron Sherman
quelle
2
Sie haben Recht! Es ist nur der Visual Studio 2013-Debugger, der nicht an einem Haltepunkt in der Startup-Klasse angehalten wird - während er unter lokalem IIS ausgeführt wird. Seltsam.
Vkelman
4
Können Sie das "Anhängen an W3P.exe" näher erläutern? Ich habe das gleiche Problem, dass der Haltepunkt nicht mit IIS getroffen wird, sondern mit IISExpress. Ich habe die Anwendung gestoppt, an w3wp.exe angehängt und dann zu meinem lokalen Host navigiert, aber es wird immer noch nicht getroffen. Habe ich etwas verpasst
Sean
Ich kann auch keine Verbindung zu einer laufenden Instanz meiner App herstellen, obwohl ich glaube, dass ich dies zuvor konnte. Ich habe versucht, eine App in einem Browser zu öffnen, dann in VS2013 "Debug-> An Prozess anhängen" zu verwenden und dann eine Seite in einem Browser neu zu laden. VS hörte nicht auf. Ich weiß, dass OWIN Startup ausgeführt wird: Ich habe mich für Debug-Zwecke angemeldet. Es ist wie in einem dunklen Zeitalter der Zwischen-Debugging-Drucke.
Vkelman
2
Ein Mitarbeiter hat mir gerade gezeigt, dass in iis der Debugger beim Start unterbrochen wird, wenn Sie auf den Standard-App-Pool doppelklicken und den verwalteten Pipeline-Modus auf klassisch ändern. Danach lief ich und bekam eine Fehlermeldung, dass die Anwendung in Integrated ausgeführt werden musste, sodass ich sie zurück ändern musste, aber zumindest feststellen konnte, dass sie dort kaputt ging.
Matt Bodily
Hier gibt es ein paar Dinge. "w3wp.exe" basiert auf dem Anwendungspool. Sie sollten in der Lage sein, global.asax und owin zu debuggen, wenn Ihre Anwendung nicht die erste Anwendung ist, die Sie anfordern, um diesen Prozess zu starten. dh fordern Sie eine andere Anwendung im Anwendungspool an, "An w3wp.exe anhängen", und fordern Sie dann die Anwendung an, die Sie debuggen möchten.
Brett Caswell
26

Wenn Sie Probleme beim Debuggen des Codes in der StartupKlasse haben, hatte ich auch dieses Problem - oder ich dachte, ich hätte es getan. Der Code wurde ausgelöst, aber ich glaube, es passiert, bevor der Debugger angehängt wurde, sodass Sie keine Haltepunkte für den Code setzen und sehen können, was passiert.

Sie können dies beweisen, indem Sie eine Ausnahme in der ConfigurationMethode der StartupKlasse auslösen.

Remotec
quelle
Genau das passiert. Gibt es eine Lösung, um die Startup-Klasse nach dem Anhängen des Debuggers auszulösen?
Tom Schreck
Darf ich wissen, wie man eine Ausnahme in der Konfigurationsmethode auslöst?
Karthikeyan
1
Diese Zeile wurde zu Startup.cs hinzugefügt, um zu beweisen, dass sie ausgeführt wurde: System.IO.File.WriteAllText (@ "c: \ temp \ startup.txt", "Started");
RaoulRubin
1
@Karthikeyan - Füge diese Zeile nach vor (egal) der ConifureAuth (App) hinzu; line - neue Ausnahme auslösen ("Hallo");
Francis Rodgers
Machen Sie die erste Zeile System.Threading.Sleep (10_000), so dass es lange genug wartet, bis der Debugger angehängt ist, bevor Sie fortfahren (nach Bedarf anpassen)
James Gray
16

DEBUGGING-TIPPS

Wenn das Debuggen nicht funktioniert, verwenden Sie IIS Express oder die folgende Methode für lokales IIS

Verwenden von lokalem IIS

Aus irgendeinem Grund ermöglicht diese Methode das Debuggen dieser Methode:

  1. Fordern Sie eine Webseite an
  2. Zum Prozess w3wp.exe anhängen
  3. Berühren Sie die Datei web.config
  4. Fordern Sie eine Webseite an

Extra Tipp

Vielleicht wird dadurch ein Cache geleert:

  1. Fügen Sie in web.config das Attribut optimizeCompilations mit einem falschen Wert hinzu

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

  2. Führen Sie die Site aus

  3. Machen Sie die Änderung in web.config rückgängig
Rasmus
quelle
2
Das Umschalten der Einstellung optimizeCompilations="false"funktioniert für mich
Barsh
Du rettest meinen Tag! optimizeCompilations = "false" arbeiten für mich.
Vostrugin
OptimizeCompilations hat mir den Tag gerettet. Danke :)
Bogdan Stojanovic
13

Ich hatte ein ähnliches Problem und das Löschen von temporären ASP.NET-Dateien hat es behoben. Hoffe das hilft jemandem.

zufällige Lösungen
quelle
4
Nur als Referenz, hier ist eine weitere Antwort, die ein wenig mehr Details darüber enthält, wo diese Dateien gespeichert sind: stackoverflow.com/questions/16137457/…
Sam Storie
1
Ich führe IIS EXPRESS und Fenster 8 aus: Lösche hier: C: \ Benutzer \ Ihr Benutzername \ AppData \ Local \ Temp \ Temporäre ASP.NET-Dateien \ vs
Gray Wolf
Vielen Dank, ich habe diese Antwort bemerkt, weil ich vor dieser einen Fehler hatte, weil eine Datei im Ordner Temporäre ASP.NET-Dateien
gesperrt wurde
Ich hatte einen ganzen Tag damit zu kämpfen und schließlich funktionierte das für mich. Nach dem Löschen des Temporary ASP.NET FilesOrdnerinhalts wurde der Owin-Start aufgerufen.
Harsh Baid
11

Ich hatte das gleiche Problem. Das Microsoft.Owin.Host.SystemWeb-Paket wurde installiert, aber während der Installation konnte NuGet die DLL aus irgendeinem Grund nicht als Referenz hinzufügen. Stellen Sie sicher, dass Ihr Projekt diese Referenz hat. Wenn nicht, können Sie versuchen, neu zu installieren:

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

Ich hatte einen Fehler wie unten bei der Neuinstallation, aber irgendwie hat es funktioniert:

Systemaufruf fehlgeschlagen. (Ausnahme von HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))

Ufuk Hacıoğulları
quelle
Ich hatte eine Weile dagegen gekämpft, und das hat mein Problem behoben. Ich hatte die Nuget-Referenz in packages.config, aber mein csproj hatte die Referenz nicht.
Zackary Geers
1
In meinem Fall hatte ich das Paket überhaupt nicht installiert. Das Ausführen des Installationspakets Microsoft.Owin.Host.SystemWeb hat mein Problem behoben. Danke für den Tipp.
J. Horn
2

In meinem Fall wurde der IIS-Anwendungspool nicht auf Version 4 festgelegt. Es war v2.

Der AppPool wurde auf v4 geändert und alles war in Ordnung.

Grauer Wolf
quelle
2

Ich hatte das gleiche Problem, als ich Owin zu einem vorhandenen Webprojekt hinzufügte. Ich stellte schließlich fest, dass das Problem auf Folgendes in der Datei web.config zurückzuführen war.

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

   ...

</assemblies>

Die Remove Assembly = "*" hat das Problem verursacht. Wenn ich diese Zeile entferne, wird der Owin-Startcode ausgeführt. Ich ändere es schließlich wie folgt und es hat perfekt funktioniert

<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
quelle
1
Ich hatte ein Sitecore-Projekt und in meiner Datei web.config gab es kein <remove Assembly = * "/> -Tag. Das Hinzufügen von <add Assembly =" Microsoft.Owin.Host.SystemWeb "/> hat mein Problem behoben.
burki
Vielen Dank an @burki, aufgrund Ihres Kommentars habe ich mich gezwungen, diese Lösung auszuprobieren, und sie hat auch bei uns funktioniert! Die Owin-Startklasse wurde seit dem Update von VS auf 15.9.9 nicht mehr ausgelöst.
David
ich danke dir sehr! Dies hat das Problem behoben. Ich musste Folgendes hinzufügen: <assemblies> <remove Assembly = "*" /> <add Assembly = "myapplication" /> <add Assembly = "Microsoft.Owin.Host.SystemWeb" /> <add Assembly = "Microsoft.Owin.Security" /> <add assembly = "System.Web.Mvc" /> <add assembly = "System.Web.WebPages" /> <add assembly = "System.Web.Helpers" /> < / Baugruppen>
Trykyn
1

In meinem Fall wird der Ausgabepfad meiner Website von jemandem geändert, der IIS Express lädt OWIN sogar nicht und die Setup-Klasse wird natürlich nicht getroffen. Nachdem ich den Ausgabepfad auf "bin \" gesetzt habe, funktioniert es gut.

Sean Song
quelle
1

In meinem Fall ist dieses Microsoft.Owin.Host.SystemWeb-Paket im Projekt vorhanden.

Im Folgenden sind jedoch zwei Tags in web.config nicht vorhanden.

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

Nach dem Hinzufügen funktioniert es reibungslos.

ABB
quelle
1

In meinem Fall hatte meine web.config

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

Um es zu zwingen, auf Owin zurückzugreifen, musste es so sein

<authorization>
  <deny users="*" />
</authorization>
Sirdank
quelle
0

Ich habe mit vielen Vorschlägen in diesem Beitrag herumgespielt.

Ich hatte folgendes, konnte aber immer noch nicht auf einem Haltepunkt landen. Das Auslösen einer Ausnahme bewies, dass der Code eingegeben wurde.

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

Aus Verzweiflung habe ich mir schließlich die Projekte-> Eigenschaften angesehen und dann im Abschnitt WEB auch das Kontrollkästchen NATIVE CODE aktiviert (ASP.NET sollte bereits aktiviert sein).

Das hat es endlich für mich behoben.

Hinweis: Ich verwende Visual Studio 2017 Professional.

Anthony De Souza
quelle
0

Ich bin nicht sicher, ob dies noch jemandem helfen wird, aber ich habe alle oben genannten Lösungen (und einige andere Beiträge) ohne Erfolg durchgeführt.

Was das Problem an meinem Ende behoben hat, war, einen Backslash an das Ende des RedirectUri-Werts in der web.config zu setzen (verrückt, ich weiß!). RedirectUri ist ein Parameter in UseOpenIdConnectAuthentication.

Also statt:

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

Mach das:

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

Außerdem wurde die Antwort-URL in den Azure App-Einstellungen aktualisiert.

Dadurch wurde der Start irgendwie wie erwartet ausgeführt (wahrscheinlich wurde ein Cache geleert), und die Haltepunkte werden jetzt ausgelöst.

Zu Ihrer Information. Ich habe meinen Code von hier aus modelliert: https://github.com/microsoftgraph/aspnet-connect-sample

niki b
quelle
0

Nachdem ich eine Klassenbibliothek in ein Webanwendungsprojekt konvertiert hatte , stieß ich darauf und wurde hartnäckig. Es stellte sich heraus, dass ich in meiner .csProjAkte Folgendes hatte:

<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>
  • So bauen Sie die verschiedenen DLLs in einen Unterordner des bin-Ordners (was ifc. nicht funktioniert). Die Lösung bestand darin, beide Textinhalte OutputPathauf einfach zu ändern bin\.
Frederik Struck-Schøning
quelle
0

Für mich war es, weil sie nicht im gleichen Namespace sind. Nachdem ich meinen AppStart aus "project.Startup.AppStart" entfernt und sowohl Startup.cs als auch Startup.Auth.cs mit dem Namespace "project.Startup" belassen hatte, funktionierte alles wieder einwandfrei.

Ich hoffe es hilft!

Fábio Carvalho
quelle
0

Wenn dieses Problem beim IIS-Hosting auftritt, jedoch nicht beim F5-Debugging, erstellen Sie eine neue Anwendung in IIS.

Das hat es für mich behoben. (Windows 10) Am Ende habe ich die "schlechte" IIS-Anwendung gelöscht und eine identische mit demselben Namen neu erstellt.

pmb5
quelle
0

Ich denke, was einige Leute oben versucht haben, ist, dass Sie, wenn Sie Ihren OWIN-Server programmgesteuert zum Leben erwecken möchten, so etwas nennen würden:

using Microsoft.Owin.Hosting;

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

Sobald Sie diesen Aufruf getätigt haben, wird der Aufruf von StartupMethod () im Debugger ausgelöst

JoeHz
quelle
0

Das hat bei mir funktioniert:

Authentifizierungsmodus hinzufügen = "Keine"

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

Fügen Sie zuerst die OWIN-Authentifizierungsklasse hinzu und aktivieren Sie dann OWIN: AutomaticAppStartupFügen Sie zuerst Authentifizierungsklasse hinzu Schlüssel in Ihrer web.config wie Jetzt wird es feuern

Venkatesh Prabu
quelle