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.


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 .


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.


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.


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.


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

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.


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


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.


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>

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.


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.


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>

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.


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


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

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!


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.


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



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>

-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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.