web-dev-qa-db-fra.com

OwinStartup ne tire pas

Le code de configuration OwinStartup fonctionnait parfaitement, puis il a cessé de fonctionner. Malheureusement, je ne sais pas exactement ce que j'ai fait pour que cela arrête de fonctionner et j'ai vraiment du mal à le comprendre. 

Pour être sûr d’avoir les bases couvertes, j’ai vérifié deux fois pour être sûr que j’ai le 

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

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

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

J'ai aussi essayé d'appeler spécifiquement l'appSetting:

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

Avant de cesser de fonctionner, j'ai mis à niveau les packages Microsoft.Owin.Security NuGet vers la version 2.0.2. J'ai donc essayé de les rétablir en version 2.0.1 (ce qui était pénible), mais cela n'a rien changé. WebActivator est installé sur le projet et je l’utilise pour amorcer d’autres choses, mais j’ai testé cela sur un nouveau modèle d’application Web et cela fonctionne 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 à l'aide du type de classe de démarrage OWIN dans Ajouter un nouvel élément, et cela n'est pas appelé non plus. Ensuite, j'ai essayé d'ajouter une deuxième classe Startup, car je sais qu'elle lève une exception s'il y a plus d'un attribut OwinStartup défini, mais il ne lève aucune exception.

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

Mettre à jour

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

288
Jeff Treuting

Assurez-vous d'avoir installé le package Microsoft.Owin.Host.SystemWeb dans le projet. Ce package est nécessaire à la détection de démarrage dans les applications hébergées IIS. Pour plus d'informations, vous pouvez consulter this article. 

655
Praburaj

Si vous avez mis à niveau une ancienne version de MVC, assurez-vous de ne pas avoir

  <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 me rends compte que vous en avez déjà parlé mais parfois des gens (comme moi) ne lisent pas toute la question et sautent aux réponses ...

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

49
Simon_Weaver

Réponse alternative au problème initial discuté - Owin "ne tire pas". Dans mon cas, j'ai passé des heures à penser que ce n'était pas un coup de feu dû à l'impossibilité de définir un point d'arrêt.

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

  • IIS Express - L'exécution de "F5" interrompra le code de démarrage d'OWIN

  • IIS - L'exécution de "F5" ne sera pas interrompu jusqu'à ce que le code OWIN (et global.asax) soit chargé. Si vous attachez à W3P.exe, vous pourrez y accéder.

46
Aaron Sherman

Si vous rencontrez des problèmes pour déboguer le code dans la classe Startup, j'ai également eu ce problème - ou je pensais l'avoir fait. Le code a été déclenché, mais je crois 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 méthode Configuration de la classe Startup.

24
Remotec

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.

Utiliser local IIS  

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

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

Extra tip

Peut-être que cela videra une mémoire cache:

  1. Dans web.config, ajoutez l'attribut optimisationCompilations avec une valeur false

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

  2. Exécuter le site

  3. Annuler le changement dans web.config
14
Rasmus

J'ai eu un problème similaire à celui-ci et le nettoyage temporaire des fichiers ASP.NET l'a corrigé. J'espère que ça aide quelqu'un.

12
randomsolutions

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 été en mesure d'ajouter la dll en tant que 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))

10

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.

2
Grey Wolf

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.

1
ABB

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

1
Sean Song

Dans mon cas, mon web.config avait

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

Pour le forcer à revenir à Owin, il me fallait

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

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û au suivant dans le fichier web.config.

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

   ...

</assemblies>

La suppression Assembly = "*" était à l'origine du problème. Lorsque je supprime cette ligne, le code de démarrage Owin est exécuté. Je l'ai finalement modifié 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>
0
James Rapson

Après conversion d'une bibliothèque de classes en un projet d'application Web }, je me suis heurté à cela et je suis devenu têtu. En fait, dans mon fichier .csProj, 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 différentes dll dans un sous-dossier du dossier bin (qui ne fonctionnera pas si). La solution consistait à modifier les deux contenus textuels de OutputPath en bin\.

Je pense que ce que certaines personnes essayaient de faire plus haut, c'est que si vous voulez programmer votre serveur OWIN "à la vie", vous appelez 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 cet appel effectué, vous verrez l'appel à StartupMethod () se déclencher dans le débogueur.

0
JoeHz

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

J'espère que ça aide!

0
Fábio Carvalho

Je me suis amusé avec beaucoup de suggestions sur ce post.

J'avais le suivant mais je ne pouvais toujours pas atterrir sur un point de rupture. Lancer 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 de cause, j'ai examiné 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 a finalement résolu le problème pour moi.

Remarque: j'utilise Visual Studio 2017 Professional.

0
Anthony De Souza

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

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

Donc, au lieu de:

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

Faire ceci:

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

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

Cela a en quelque sorte fait en sorte que le démarrage s'exécute comme prévu (probablement du cache effacé), et les points d'arrêt sont maintenant activés.

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

0
niki b

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 a résolu le problème pour moi. (Windows 10) Finalement, j'ai supprimé le "mauvais" application IIS et en ai créé un identique avec le même nom.

0
pmb5