web-dev-qa-db-fra.com

Comment obtenir IIS pour reconnaître la classe de démarrage OWIN?

Mon service Web OWIN fonctionne à merveille dans Visual Studio 2013, mais lorsque je le publie sur un vrai site IIS, il agit comme si la méthode de configuration dans la classe de démarrage n'avait pas été exécutée. Je peux le faire des choses "normales" comme naviguer vers l'application et voir la structure du répertoire, mais rien qui aurait été configuré avec IAppBuilder n'est fonctionnel. Par exemple, j'obtiens une erreur 404.0 lorsque je navigue vers une URL qui a été configurée au démarrage pour émettre un jeton porteur OAuth2. C'est comme si Startup.Configuration (application IAppBuilder) n'avait jamais été exécuté.

J'utilise l'attribut [Assembly: OwinStartup(typeof(MyNamespacedStartupClass))] pour désigner la classe de démarrage.

J'ai utilisé NuGet pour obtenir à la fois Microsoft.Owin.Host.SystemWeb et Microsoft.Owin.Diagnostics selon les instructions que j'ai vues, mais cela ne fait aucune différence.

Que dois-je faire de plus?

32
LSpencer777
  1. Assurez-vous que votre pool d'applications est en mode intégré v4.0.
  2. Assurez-vous que vous avez placé Microsoft.Owin.Host.SystemWeb (je vois que vous l'avez installé) - Assurez-vous qu'il est également dans le dossier bin.

Cet article aura plus d'informations sur le fonctionnement d'un middleware OWIN sur le pipeline intégré.

26
Praburaj

J'ai également dû ajouter un paramètre supplémentaire à mon web.config

<configuration>    
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />       
    </system.webServer> 
</configuration>

De: https://katanaproject.codeplex.com/wikipage?title=Static%20Files%20on%20IIS

IIS possède un module de fichier statique natif qui est optimisé pour ignorer d'autres parties du pipeline s'il voit des chemins de fichier qui ne correspondent pas à d'autres gestionnaires (par exemple, pas aspx). Cela signifie que le middleware du navigateur d'annuaire est susceptible de fonctionner, mais le middleware de fichier statique peut être contourné en faveur du module de fichier statique natif.

Cela indique à IIS de ne pas ignorer les modules Asp.Net gérés même si le module de fichier statique natif pense qu'il a une correspondance.

Il décrit également une autre étape, mais cela n'était pas nécessaire pour moi:

Ajoutez également le marqueur d'étape suivant APRÈS votre middleware de fichier statique (dans l'espace de noms Microsoft.Owin.Extensions): app.UseStageMarker (PipelineStage.MapHandler);

12
Martijn Evens

J'ai également rencontré les mêmes problèmes lorsque j'ai migré mon site MVC5 déjà en cours d'exécution vers un nouveau serveur. Ça m'a fait des cauchemars, juste pour récapituler j'ai dû faire tout ça pour le faire fonctionner

  1. Ajoutez [Assembly: OwinStartupAttribute(typeof([YourAssemblyName].Startup))] this à la classe Startup (après les instructions using et avant la déclaration d'espace de noms)
  2. Ajoutez ces clés au <appSettings> section de web.config

    <add key="owin:AppStartup" value="[NamespaceForYourStartUpClass].Startup, [YourAssemblyName]" />
    <add key="owin:AutomaticAppStartup" value="true" />
    
  3. Enfin, comme l'a suggéré Martijn Evens, ajoutez ce qui suit à <system.webserver> section dans web.config

    <modules runAllManagedModulesForAllRequests="true" />
    
5
Niraj

Probablement la raison pour laquelle vous avez mis à niveau à un moment donné à partir d'un ancien MVC:

Assurez-vous que vous n'avez pas

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

dans ton web.config. Il supprimera l'appel du démarrage

Au lieu de cela, changez-le en ceci

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

Quelque part le long de la ligne - lorsque j'ai mis à niveau vers MVC 5, cela a été ajouté (en fait, presque ironiquement, c'était il y a un an demain) et je n'ai même jamais su ce qu'était owin jusqu'à aujourd'hui quand j'ai essayé de l'utiliser.

3
Simon_Weaver