2014-04-24 5 views
8

Przeczytałem wiele postów na ten temat, ale nadal nie mogę tego uruchomić. Używam Visual Studio 2013. Stworzyłem nowy projekt MVC 5 i pomyślałem, że byłoby fajnie używać nowej integracji z Facebookiem. Działa dobrze na moim komputerze w IIS Express.Microsoft.Owin.Host.SystemWeb i nadal otrzymuję Brak elementu owin.Environment został znaleziony w kontekście

Ale kiedy przesyłam go na serwer produkcyjny, otrzymuję bardzo denerwujący komunikat "Nie znaleziono elementu owin.Environment w kontekście".

Oto, co zrobiłem.

  1. Nigdy nie zmieniłem nazwy mojego projektu lub zespołu.
  2. Nazwa zespołu jest Wodivate
  3. Przestrzeń nazw jest Wodivate
  4. mam domyślną klasę Startup.cs który zawiera następujące elementy:

    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. W App_Start jest Startup.Auth. plik CS, który zawiera:

    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. Mój plik Web.config obejmuje:

    <add key="owin:AppStartup" value="Wodivate.Startup, Wodivate" /> 
    <add key="owin:AutomaticAppStartup " value="false" /> 
    
  7. Ja również zadbał, aby podążać za post No owin.Environment item was found in the context - only on server i zainstalowane Microsoft.Owin.Host.SystemWeb

Ktoś jeszcze zatrzymany w tej sprawie? Uderzam w ścianę przez 3 dni.

+0

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

+0

Widziałem ten post zbyt Morten, ale to nie działało dla mnie .Chcesz sprawdzić, czy ktoś widział te wszystkie posty i czy nadal tkwi lub znalazł coś innego, aby go rozwiązać. To jest tak dziwne .. – user3562747

+0

Upewnij się, że twój Web.config naprawdę trafił w odpowiednie miejsce na serwerze produkcyjnym ... – Dunken

Odpowiedz

3

Potrzebowałem kolejną zmianę web.config, aby rozwiązać ten problem:

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

Choć biorąc pod uwagę, że this setting is discouraged Próbowałem:

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

ale to dało mi błąd:

„operacja jest nieważny ze względu na obecny stan obiektu "

i nie jestem su co jeszcze się tam dzieje, czy to niewłaściwy moduł, czy coś innego.

+0

który zrobił to dla mnie – tatigo

3

Czy próbowałeś zrobić coś takiego?

<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

Miałem ten sam problem i było to spowodowane ustawieniami IIS.

Moje wdrożenie IIS miało witrynę najwyższego poziomu z kilkoma aplikacjami pod nią. Należy upewnić się, że "Ustawienia aplikacji" na poziomie witryny nie kolidują z aplikacją.

W moim przypadku miałem "owin: AutomaticAppStartup = false" na poziomie witryny, który został odziedziczony przez moją aplikację.

Podsumowanie:

  1. Otwórz Menedżera IIS
  2. Select Server -> Ustawienia aplikacji. Upewnij się, że na tym poziomie nie ma konfliktów związanych z owymi.
  3. Wybierz stronę -> Ustawienia aplikacji. Upewnij się, że na tym poziomie nie ma konfliktów związanych z owymi.

enter image description here


Edit: odkryłem, można po prostu dodać następujące AppSetting w web.config, aby zastąpić dowolny potencjał dziedziczone konfliktów. Zaleciłbym jednak zrozumienie, czy najpierw występują konflikty, aby można było dokonać wykształconej zmiany.

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

Czy sprawdzono tryb korzystania z puli aplikacji. OWIN działa w trybie zintegrowanym z pulą aplikacji. Nie będzie działać w trybie klasycznym.

0

Co się dzieje, że Twój BIN nie zawiera odniesienia. W preferencjach zmień go na "Kopiuj lokalnie" na PRAWDA. następnie opublikuj go ponownie.

0

Walczyłem z tym przez DAYS !! Próbowałem wszystkiego w każdym poście, jaki mogłem znaleźć, a to naprawiło problem. Pracowałem w VS 2013 i publikowałem na maszynie wirtualnej Server 2008 VM i ciągle otrzymywałem ten sam komunikat "No owin.Environment item was found in context".

Wstawiłem ten wpis do konfiguracji sieci dla modułów i naprawiłem go. Nie jestem pewien, czy rozumiem, dlaczego to naprawił, ale tak się stało.

<modules runAllManagedModulesForAllRequests="true" /> 
+0

Isn ' t to samo, co [@ breandán's answer] (http://stackoverflow.com/a/23834262/4453460)? – lfurini

1

Gdy pojawi się wyjątek "Nie znaleziono elementu owin.Environment w kontekście". od Request.GetOwinContext(), zwykle oznacza to, że wykrywanie klasy startowej OWIN nie powiodło się.

Upewnij się, że podczas uruchamiania program IIS wykonuje kod w pliku Startup.cs (w folderze głównym). Aby sprawdzić, czy działa na serwerze produkcyjnym, polecam następujące rzeczy. 1) Włóż następujący wiersz:

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

2) Get narzędzia DebugView stąd: https://technet.microsoft.com/en-us/library/bb896647.aspx

3) Wykonaj DbgView.exe jako administrator i upewnij się, że opcja "Przechwytywanie/Przechwytywanie Globalny Win32" jest włączona .

4) Po uruchomieniu IIS powinieneś zobaczyć komunikat śledzenia z powyższego kodu (upewnij się, że jest on ponownie uruchomiony przez dotknięcie web.config).

5) Jeśli nie jest wykonywany, sprawdź tutaj: http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection

Istnieje wiele powodów, dla których nie jest wykonywany. Wiele z nich jest na stackoverflow. Jeszcze jedno, co dodam, to ten: Upewnij się, że nie masz ustawienia "batch = false" w węźle "kompilacji" web.config.

Powiązane problemy