OwinStartup ne se déclenche pas

350

J'ai eu le code de configuration OwinStartup fonctionnant parfaitement, puis il a cessé de fonctionner. Malheureusement, je ne sais pas exactement ce que j'ai fait pour que cela cesse de fonctionner et j'ai vraiment du mal à le comprendre.

Pour m'assurer d'avoir les bases couvertes, j'ai vérifié deux fois pour m'assurer que j'ai le

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

attribut correctement attribué et vérifié que je n'ai pas d'appSetting pour owin: AutomaticAppStartup défini sur false, j'ai donc défini un ensemble sur true pour être sûr car il n'y avait rien auparavant.

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

J'ai également essayé d'appeler spécifiquement l'application

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

Avant qu'il ne cesse de fonctionner, j'ai mis à niveau les packages Microsoft.Owin.Security NuGet vers 2.0.2, j'ai donc essayé de les rétablir en 2.0.1 (ce qui était pénible) mais cela n'a rien changé. J'ai installé WebActivator sur le projet et je l'utilise pour démarrer d'autres choses, mais je l'ai testé sur un nouveau modèle WebApplication et cela fonctionne là-bas, donc je ne pense pas que ce soit le coupable.

J'ai également essayé de supprimer ma classe de démarrage et d'utiliser Visual Studio pour en ajouter une nouvelle en utilisant le type de classe de démarrage OWIN dans Ajouter un nouvel élément et qui n'est pas appelé non plus. Ensuite, j'ai essayé d'ajouter une deuxième classe Startup car je sais qu'elle lèvera une exception s'il y a plus d'un attribut OwinStartup défini, mais il ne lance aucune exception à cet endroit.

Je ne sais pas quoi d'autre à essayer. Des pensées?

Mise à jour

Il s'avère que Resharper a supprimé la référence à Microsoft.Owin.Host.SystemWeb lorsque je l'ai utilisé pour supprimer les références inutilisées.

Jeff Treuting
la source
37
Le package Microsoft.Owin.Host.Systemweb est-il installé dans cette application? Assurez-vous que cette DLL fait également partie du dossier bin?
Praburaj
1
C'était ça. Merci beaucoup. Je pense que ce qui s'est passé, c'est que j'ai utilisé Resharper pour supprimer les références inutilisées à un moment donné et il ne pense pas que ce soit nécessaire. Si vous voulez mettre cela comme une réponse, je vais certainement le marquer comme la solution. Merci pour l'aide.
Jeff Treuting
2
Jeff, ReSharper a supprimé la référence "inutilisée" à Microsoft.Owin.Host.Systemweb - parlez-vous de "l'utilisation" de l'instruction? Dans quel fichier, Startup.cs?
vkelman
4
J'ai eu exactement le même problème, resharper a supprimé la référence à Microsoft.Owin.Host.SystemWeb. Je l'ai corrigé en ouvrant la fenêtre de la console du gestionnaire de packages dans Visual Studio et en exécutant la commande suivante PM> Update-Package -reinstall Microsoft.Owin.Host.SystemWeb
Joe King
1
En tant que mise à jour du commentaire de @ JoeKing ci-dessus. La console PM n'a pas été mise à jour en tant que "introuvable". J'ai dû aller pour une réinstallation. PM> Install-Package Microsoft.Owin.Host.SystemWeb
Morvael

Réponses:

768

Assurez-vous que vous avez installé le Microsoft.Owin.Host.SystemWebpackage dans le projet. Ce package est nécessaire pour la détection de démarrage dans les applications hébergées IIS. Pour plus d'informations, vous pouvez vous référer à cet article .

Praburaj
la source
4
Comment quelqu'un pourrait-il lancer la détection de démarrage Owin par programmation dans une bibliothèque encapsulée consommée / owin, en supposant que nous avons un endroit pour l'appeler ( PreApplicationStartMethod ), sans exiger ces références directes des trucs Microsoft.Owin? Comment provoquons-nous spécifiquement Katana à appeler Startup.Configuration(IAppBuilder)?
Jason Kleban
7
Essayer de créer une application à partir de zéro, sans utiliser le modèle MVC. Cela a mis fin à 2 heures de désespoir.
mkvlrn
1
Juste au moment où je criais, Resharper est le plus gros tueur de productivité.J'ai eu ce problème et je n'ai pas pu comprendre pendant une semaine pourquoi l'API Web a cessé de fonctionner. Un autre resharper de preuve tue ma productivité.
Ivan G.
5
Exiger de référencer une bibliothèque qui n'est pas vraiment utilisée lors de la compilation est une mauvaise conception de Microsoft! Resharper fait de son mieux mais il n'y a pas d'arme contre de si mauvaises décisions.
ps_ttf
22
Incroyable. Chaque fois que j'ajoute un fichier de démarrage OWIN, j'ai ce problème. Et chaque fois que j'oublie pourquoi, je me retrouve avec cette réponse.
Tobias
70

Si vous avez effectué une mise à niveau à partir d'une ancienne version de MVC, assurez-vous que vous n'avez pas

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

dans votre web.config. Il supprimera l'appel de la logique de démarrage.

Au lieu de cela, changez-le en true

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

Je sais que vous l'avez déjà mentionné, mais parfois les gens (comme moi) ne lisent pas toute la question et sautent juste aux réponses ...

Quelque part le long de la ligne - lorsque je suis passé à MVC 5, cela a été ajouté et je ne l'ai jamais vu jusqu'à aujourd'hui.

Simon_Weaver
la source
A eu le même problème lors de l'implémentation d'une classe de démarrage Owin dans un ancien projet mvc. Changer la valeur a fait l'affaire!
Darxtar
Cela fonctionne pour moi Merci
Ghanshyam Singh
51

Réponse alternative au problème d'origine discuté - Owin "ne tire pas". Dans mon cas, j'ai passé des heures à penser qu'il ne tirait pas car je ne pouvais pas y définir de point d'arrêt.

Lors du débogage du démarrage OWIN dans Visual Studio

  • IIS Express - L'exécution de "F5" s'arrêtera sur le code de démarrage OWIN

  • IIS - L'exécution de "F5" ne s'arrêtera qu'après le chargement du code OWIN (et global.asax). Si vous vous connectez à W3P.exe, vous pourrez y accéder.

Aaron Sherman
la source
2
tu as raison! C'est juste que le débogueur Visual Studio 2013 ne s'arrête pas sur un point d'arrêt dans la classe de démarrage - lors de l'exécution sous IIS local. Bizarre.
vkelman
4
Pouvez-vous élaborer sur le «attachement à W3P.exe»? J'ai le même problème que le point d'arrêt n'est pas atteint avec IIS mais est touché avec IISExpress. J'ai arrêté l'application, attaché à w3wp.exe, puis accédé à mon hôte local, mais il n'est toujours pas touché. Ai-je raté quelque chose?
Sean
Je ne peux pas non plus attacher à une instance en cours d'exécution de mon application, même si je crois que j'ai pu le faire auparavant. J'ai essayé d'ouvrir une application dans un navigateur, puis dans VS2013 d'utiliser "Debug-> Attach to Process", puis de recharger une page dans un navigateur. VS ne s'est pas arrêté. Je sais que OWIN Startup est en cours d'exécution: je mets un peu de connexion dedans à des fins de débogage. C'est comme à l'époque sombre des impressions de débogage intermédiaires.
vkelman
2
un collègue m'a juste montré que dans iis si vous double-cliquez sur le pool d'applications par défaut et changez le mode de pipeline géré en classique, le débogueur s'arrêtera au démarrage. J'ai couru après cela et j'ai reçu une erreur indiquant que l'application devait s'exécuter dans Integrated, j'ai donc dû la modifier à nouveau, mais j'ai au moins pu voir qu'elle se cassait là-bas.
Matt Bodily
Il y a deux ou trois choses ici. "w3wp.exe" est basé sur le pool d'applications. vous devriez être en mesure de déboguer global.asax et owin si votre application n'est pas la première application que vous demandez à démarrer ce processus. c'est-à-dire demander une application différente dans le pool d'applications, "Attacher à w3wp.exe", puis demander à l'application de tenter de déboguer.
Brett Caswell
26

Si vous rencontrez des problèmes pour déboguer le code dans la Startupclasse, j'ai également eu ce problème - ou je pensais que oui. Le code était en train de se déclencher, mais je pense que cela se produit avant que le débogueur ne se connecte, vous ne pouvez donc pas définir de points d'arrêt sur le code et voir ce qui se passe.

Vous pouvez le prouver en lançant une exception dans la Configurationméthode de la Startupclasse.

Remotec
la source
c'est exactement ce qui se passe. Existe-t-il une solution pour que la classe Startup se déclenche une fois le débogueur connecté?
Tom Schreck
Puis-je savoir comment lever une exception dans la méthode de configuration?
Karthikeyan
1
Ajout de cette ligne à Startup.cs pour prouver qu'elle a été exécutée: System.IO.File.WriteAllText (@ "c: \ temp \ startup.txt", "Started");
RaoulRubin
1
@Karthikeyan - Ajoutez cette ligne après avant (peu importe) le ConifureAuth (app); ligne - lancer une nouvelle exception ("Bonjour");
Francis Rodgers
Créez la première ligne System.Threading.Sleep (10_000) afin qu'il attende suffisamment longtemps pour que le débogueur se connecte avant de continuer (ajustez si nécessaire)
James Gray
16

CONSEILS DE DÉBOGAGE

Si le débogage ne fonctionne pas, essayez d'utiliser IIS Express ou essayez la méthode ci-dessous pour IIS local

Utilisation d'IIS local

Pour une raison quelconque, cette méthode permet le débogage de cette méthode:

  1. Demander une page Web
  2. Attacher au processus w3wp.exe
  3. Appuyez sur le fichier web.config
  4. Demander une page Web

Astuce supplémentaire

Peut-être que cela videra un cache:

  1. Dans web.config, ajoutez l'attribut OptimizeCompilations avec une fausse valeur

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

  2. Exécuter le site

  3. Annuler la modification dans web.config
Rasmus
la source
2
basculer le paramètre optimizeCompilations="false"fonctionne pour moi
barsh
Vous sauvez ma journée! OptimizeCompilations = "false" fonctionne pour moi.
Vostrugin
OptimizeCompilations m'a sauvé la journée. Merci :)
Bogdan Stojanovic
13

J'ai eu un problème similaire à cela et la suppression des fichiers temporaires ASP.NET l'a corrigé. J'espère que cela aide quelqu'un.

randomsolutions
la source
4
Juste pour référence, voici une autre réponse qui fournit un peu plus de détails sur l'emplacement de stockage de ces fichiers: stackoverflow.com/questions/16137457/…
Sam Storie
1
J'exécute IIS EXPRESS et la fenêtre 8: supprimez ici: C: \ Users \ Votre nom d'utilisateur \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ vs
Grey Wolf
Merci, j'ai remarqué cette réponse parce que j'avais une erreur avant celle-ci, à propos de quelque chose de verrouiller un fichier dans le dossier Fichiers ASP.NET temporaires
Elger Mensonides
Je me battais avec ça pendant 1 journée entière et finalement cela a fonctionné pour moi. Après avoir effacé le Temporary ASP.NET Filescontenu du dossier et le démarrage d'Owin a été invoqué.
Harsh Baid
11

J'ai eu le même problème. Le package Microsoft.Owin.Host.SystemWeb a été installé mais pendant l'installation, NuGet n'a pas pu ajouter la DLL comme référence pour une raison quelconque. Assurez-vous que votre projet a cette référence. Sinon, vous pouvez essayer de réinstaller:

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

J'ai eu une erreur comme ci-dessous lors de la réinstallation, mais cela a fonctionné:

L'appel système a échoué. (Exception de HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))

Ufuk Hacıoğulları
la source
Je me battais contre ça depuis un moment, et c'est ce qui a résolu mon problème. J'avais la référence nuget dans packages.config, mais mon csproj n'avait pas la référence.
Zackary Geers
1
Dans mon cas, je n'avais pas du tout installé le paquet. L'exécution du package d'installation Microsoft.Owin.Host.SystemWeb a résolu mon problème. Merci pour l'astuce.
J. Horn
2

Dans mon cas, le pool d'applications IIS n'était pas défini sur v4. C'était v2.

Changé l'AppPool en v4 et tout allait bien.

Loup gris
la source
2

J'ai eu le même problème lorsque j'ai ajouté Owin à un projet Web existant. J'ai finalement trouvé que le problème était dû à ce qui suit dans le fichier web.config.

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

   ...

</assemblies>

L'assembly de suppression = "*" était à l'origine du problème. Lorsque je supprime cette ligne, le code de démarrage Owin s'est exécuté. Je l'ai finalement changé comme suit et cela a parfaitement fonctionné

<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
la source
1
J'avais un projet sitecore et dans mon fichier web.config, il n'y avait pas de balise <remove assembly = * "/>. Mais l'ajout de <add assembly =" Microsoft.Owin.Host.SystemWeb "/> a résolu mon problème.
burki
Merci @burki, à cause de votre commentaire, je me suis forcé à essayer cette solution et cela a fonctionné pour nous aussi! La classe de démarrage Owin ne s'est pas déclenchée depuis la mise à jour de VS vers 15.9.9.
David
Merci beaucoup! cela l'a corrigé, j'ai dû ajouter le suivant: <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" /> < / assemblages>
trykyn
1

Dans mon cas, le chemin de sortie de mon site Web est modifié par quelqu'un, IIS Express ne charge même pas OWIN et la classe d'installation ne sera pas atteinte bien sûr. Après avoir défini le chemin de sortie comme "bin \", cela fonctionne bien.

Sean Song
la source
1

Dans mon cas, ce package Microsoft.Owin.Host.SystemWeb est présent dans le projet.

Mais ci-dessous, deux balises ne sont pas présentes dans web.config.

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

après les avoir ajoutés, cela fonctionne bien.

ABB
la source
1

Dans mon cas, mon web.config avait

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

Pour le forcer à se replier sur Owin, j'avais besoin qu'il soit

<authorization>
  <deny users="*" />
</authorization>
sirdank
la source
0

J'ai joué avec beaucoup de suggestions sur ce post.

J'avais ce qui suit mais je ne pouvais toujours pas atterrir sur un point d'arrêt. Le fait de lever une exception a prouvé que le code était entré.

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

Enfin, par désespoir, j'ai regardé le projet-> propriétés, puis sous la section WEB, j'ai également coché la case NATIVE CODE (ASP.NET devrait déjà être coché).

Cela m'a finalement arrangé.

Remarque: j'utilise Visual Studio 2017 Professional.

Anthony De Souza
la source
0

Je ne sais pas si cela aidera toujours quelqu'un, mais j'ai fait toutes les solutions ci-dessus (et à partir d'autres postes) en vain.

Ce qui a résolu le problème de mon côté, c'était de mettre une barre oblique inverse à la fin de la valeur RedirectUri dans le web.config (fou, je sais!). RedirectUri est un paramètre dans UseOpenIdConnectAuthentication.

Donc, au lieu de:

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

Faites ceci:

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

Et également mis à jour l'URL de réponse dans les paramètres de l'application Azure.

Cela a en quelque sorte fait démarrer le démarrage comme prévu (probablement vidé un cache), et les points d'arrêt se déclenchent maintenant.

Pour info. Je modélisais mon code à partir d'ici: https://github.com/microsoftgraph/aspnet-connect-sample

niki b
la source
0

Après avoir converti une bibliothèque de classes en projet d'application Web , je suis tombé sur cela et suis devenu têtu. Il s'est avéré, dans mon .csProjdossier, j'avais ceci:

<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>
  • construisant ainsi les diverses DLL dans un sous-dossier du dossier bin (qui ifc. ne fonctionnera pas). La solution consistait à changer le contenu du texte pour OutputPathjuste bin\.
Frederik Struck-Schøning
la source
0

Pour moi, c'est parce qu'ils ne sont pas dans le même espace de noms. Après avoir supprimé mon AppStart de "project.Startup.AppStart" et les avoir laissé à la fois Startup.cs et Startup.Auth.cs avec l'espace de noms "project.Startup", tout était à nouveau parfaitement fonctionnel.

J'espère que ça aide!

Fábio Carvalho
la source
0

Si vous rencontrez ce problème avec l'hébergement IIS, mais pas lors du débogage F5, essayez de créer une nouvelle application dans IIS.

Cela m'a arrangé. (Windows 10) À la fin, j'ai supprimé la "mauvaise" application IIS et en ai recréé une identique avec le même nom.

pmb5
la source
0

Je pense que ce que certaines personnes essayaient de voir ci-dessus, c'est que si vous voulez que votre serveur OWIN "prenne vie" par programmation, vous appelleriez quelque chose comme ceci:

using Microsoft.Owin.Hosting;

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

Une fois que vous avez effectué cet appel, vous verrez l'appel à StartupMethod () se déclencher dans le débogueur

JoeHz
la source
0

Cela a fonctionné pour moi:

ajouter le mode d'authentification = "Aucun"

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

Ajoutez d'abord la classe d'authentification OWIN, puis activez OWIN: AutomaticAppStartup clé dans votre web.config comme Maintenant ça va tirer

Venkatesh Prabu
la source