2014-04-24 3 views
8

Ich habe viele Beiträge zu diesem Thema gelesen, kann aber immer noch nicht funktionieren. Ich benutze Visual Studio 2013. Ich habe ein neues MVC 5-Projekt erstellt und dachte, es wäre cool, die neue Facebook-Login-Integration zu verwenden. Es funktioniert gut auf meinem PC in IIS Express.Microsoft.Owin.Host.SystemWeb und immer noch No Es wurde kein owin.Environment-Element im Kontext gefunden

Aber wenn ich es auf den Production-Server hochladen bekomme ich immer die sehr nervige "No owin.Environment Artikel wurde im Kontext gefunden" Nachricht.

Folgendes habe ich getan.

  1. Ich habe nie den Namen meines Projekts oder der Baugruppe geändert.
  2. Der Montage Name ist Wodivate
  3. Der Namespace Wodivate ist
  4. ich die Standard-Startup.cs Klasse haben, die folgende enthält:

    using Microsoft.AspNet.Identity; 
    using Microsoft.Owin; 
    using Microsoft.Owin.Security.Cookies; 
    using Owin; 
    using System.Web.Http; 
    
    [assembly: OwinStartupAttribute(typeof(Wodivate.Startup))] 
    namespace Wodivate 
    { 
        public partial class Startup 
        { 
         public void Configuration(IAppBuilder app) 
         { 
          ConfigureAuth(app); 
         } 
    
        } 
    } 
    
  5. Im App_Start ein Startup.Auth ist. cs-Datei mit folgendem Inhalt:

    using Microsoft.AspNet.Identity; 
    using Microsoft.Owin; 
    using Microsoft.Owin.Security.Cookies; 
    using Owin; 
    
    namespace Wodivate 
    { 
        public partial class Startup 
        { 
         // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 
         public void ConfigureAuth(IAppBuilder app) 
         { 
          // Enable the application to use a cookie to store information for the signed in user 
          app.UseCookieAuthentication(new CookieAuthenticationOptions 
          { 
           AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
           LoginPath = new PathString("/Account/Login") 
          }); 
          // Use a cookie to temporarily store information about a user logging in with a third party login provider 
          app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 
    
          // Uncomment the following lines to enable logging in with third party login providers 
          //app.UseMicrosoftAccountAuthentication(
          // clientId: "", 
          // clientSecret: ""); 
    
          //app.UseTwitterAuthentication(
          // consumerKey: "", 
          // consumerSecret: ""); 
    
          var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions() 
          { 
           AppId = "xxxxxxxxxxxxxxxxxxx", 
           AppSecret = "xxxxxxxxxxxxxxxxxxxxxxxxx" 
          }; 
          facebookOptions.Scope.Add("email"); //We want to get user's email information by adding it in scope. 
          app.UseFacebookAuthentication(facebookOptions);  
    
          //app.UseGoogleAuthentication(); 
         } 
        } 
    } 
    
  6. Meine Web.config-Datei enthält:

    <add key="owin:AppStartup" value="Wodivate.Startup, Wodivate" /> 
    <add key="owin:AutomaticAppStartup " value="false" /> 
    
  7. ich auch die Post auf No owin.Environment item was found in the context - only on server und installiert sorgte dafür, dass Microsoft.Owin.Host.SystemWeb

Noch jemand auf diese stecken folgen? Ich habe 3 Tage lang eine Wand geschlagen.

+0

Duplizieren: http://stackoverflow.com/questions/18232549/no-owin-environment-item-was-found-in-the-context –

+0

Ich sah diesen Beitrag zu Morten, aber es hat nicht für mich funktioniert .Schauen, um zu sehen, ob jemand all diese Posts gesehen hat und immer noch feststeckend ist oder etwas anderes gefunden hat, um es zu lösen. Es ist einfach so komisch. – user3562747

+0

Stellen Sie sicher, dass Ihre Web.config es wirklich an den richtigen Platz auf Ihrem Produktionsserver geschafft hat ... – Dunken

Antwort

3

brauchte ich eine andere web.config Änderung dieses Problem zu lösen:

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

Obwohl da this setting is discouraged ich versucht:

<modules> 
    <remove name="Owin" /> 
    <add name="Owin" type="Microsoft.Owin.Host.SystemWeb.OwinHttpModule, Microsoft.Owin.Host.SystemWeb" /> 
</modules> 

aber das gab mir den Fehler:

„Der Betrieb nicht gültig aufgrund des aktuellen Zustands des Objekts "

und ich bin nicht su Was passiert dort noch, ob es das falsche Modul oder etwas anderes ist.

+0

das hat es für mich getan – tatigo

3

Haben Sie versucht, so etwas zu tun?

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="false" /> 
    <handlers> 
     <remove name="StaticFile" /> 
     <add name="OWIN" path="*" verb="*" type="Microsoft.Owin.Host.SystemWeb.OwinHttpHandler" /> 
    </handlers> 
</system.webServer> 
+1

tatigo

2

Ich hatte das gleiche Problem, und es wurde von IIS-Einstellungen verursacht.

Meine IIS-Bereitstellung hatte eine Top-Level-Website mit mehreren Anwendungen darunter. Sie sollten sicherstellen, dass die "Anwendungseinstellungen" Ihrer Site-Ebene nicht mit denen Ihrer Anwendung in Konflikt stehen.

In meinem Fall hatte ich "owin: AutomaticAppStartup = false" auf der Site-Ebene, die von meiner Anwendung geerbt wurde.

Zusammenfassung:

  1. Öffnen Sie IIS-Manager
  2. Server wählen -> Anwendungseinstellungen. Stellen Sie sicher, dass auf dieser Ebene keine Konflikte bestehen.
  3. Wählen Sie Site -> Anwendungseinstellungen. Stellen Sie sicher, dass auf dieser Ebene keine Konflikte bestehen.

enter image description here


Edit: ich Sie einfach entdeckt können folgende appSetting in web.config hinzufügen, um mögliche Konflikte geerbt außer Kraft zu setzen. Ich würde empfehlen, zu verstehen, wenn es zuerst Konflikte gibt, damit Sie eine fundierte Änderung vornehmen können.

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

Haben Sie überprüft, Modus der App Pool verwendet wird. OWIN arbeitet mit dem integrierten Modus des App-Pools. Es funktioniert nicht im klassischen Modus.

0

Was passiert ist, dass Ihr BIN die Referenz nicht enthält. In den Einstellungen ändern Sie es auf "Copy Local" auf TRUE. dann veröffentlich es erneut.

0

Ich kämpfte mit diesem für Tage !! Versuchte alles in jedem Beitrag, den ich finden konnte, und das behob das Problem. Ich habe in VS 2013 entwickelt und auf einer Server 2008-VM veröffentlicht, und ich erhielt immer die gleiche Meldung "No owin.Environment-Element wurde im Kontext gefunden".

Ich habe diesen Eintrag in Web-Konfiguration für Module und es repariert es. Ich bin mir nicht sicher, ob ich verstehe, warum es es repariert hat, aber es hat es getan.

<modules runAllManagedModulesForAllRequests="true" /> 
+0

Isn ' t das gleiche wie [@ breandáns Antwort] (http://stackoverflow.com/a/23834262/4453460)? – lfurini

1

Wenn Sie die Exception 'No owin.Environment Artikel wurde im Rahmen gefunden.' von Request.GetOwinContext() bedeutet dies normalerweise, dass die Erkennung der OWIN-Startup-Klasse fehlgeschlagen ist.

Stellen Sie sicher, dass IIS den Code in Startup.cs (im Stammordner) beim Start ausführt. Um zu überprüfen, ob es auf einem Produktionsserver funktioniert, würde ich Folgendes empfehlen. 1) Legen Sie die folgende Zeile:

... 
System.Diagnostics.Trace.WriteLine("OwinStartup " + this.GetType().Namespace); 
ConfigureAuth(app); 
... 

2) Holen Sie sich das Debugview-Dienstprogramm von hier: https://technet.microsoft.com/en-us/library/bb896647.aspx

3) Führen Sie DbgView.exe als Administrator und stellen Sie sicher, dass die Option "Aufnahme/capture Globale Win32" aktiviert .

4) Sie sollten eine Ablaufverfolgungsnachricht aus dem obigen Code sehen, wenn IIS startet (stellen Sie sicher, dass es tatsächlich neu gestartet wird, indem Sie web.config berühren).

5) Wenn es nicht ausgeführt ist, überprüfen Sie hier: http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection

Es gibt eine Reihe von Gründen, dass es nicht ausgeführt wird. Viele von ihnen sind auf Stackoverflow. Eine weitere, die ich hinzufügen werde, ist diese: Stellen Sie sicher, dass Sie nicht die Einstellung "Batch = False" auf dem Knoten "Compilation" von web.config haben.

Verwandte Themen