2012-07-02 19 views
5

Mam aplikację internetową, która utknęła w nieskończonej pętli i nie mam pojęcia, gdzie szukać dalej. To jest strona intranetowa, więc nie ma linku, który mogę udostępnić, ale podaję tyle szczegółów, ile tylko mogę sobie wyobrazić. Byłbym wdzięczny za wszelkie pomysły i sugestie. Każdy ma.302 Infinite Loop

Szczegóły:

  • IIS 7
  • .Net 4.0
  • Windows 2008
  • dokument domyślny jest Login.aspx
  • Nie przekierowania HTTP ustawiony na aplikacji lub Login.aspx w IIS
  • Fiddler wyświetla Login.aspx przy użyciu kodu stanu 302 i przekierowuje do Login.aspx

Jeśli otworzę moją witrynę, wskazuje ona Login.aspx i utknie w pętli 302. Jeśli otworzę stronę, ale wskażę register.aspx, Fiddler wyświetli register.aspx przechodząc do Login.aspx, który oczywiście przekieruje do Login.aspx.

Co robiłem:

  • Uruchom webapp z Visual Studio - wszystko działa poprawnie
  • Sprawdź web.config dla przekierowania poleceń - istnieją żadne
  • Sprawdź IIS dla przekierowania poleceń - nie ma żadnych.
  • Spójrz na skrzypka dla innej strony w pętli - nie ma żadnych, po prostu Login.aspx do Login.aspx
  • Sprawdź Login.aspx dla poleceń przekierowania - nie ma żadnych
  • Sprawdź kod Login.aspx tyłu za przekierowania poleceń - istnieją żadne
  • Uruchom aplikację na moim polu używając web.config z serwera - wszystko działa
  • Sprawdź Login.aspx dla przekierowania poleceń - nie ma żadnego
  • wyczyszczone Cache - problem nadal występuje
  • Opublikowane - problem nadal występuje
  • Opublikowane i wyczyszczone cache - problem nadal występuje
  • Wyłączone Domyślny dokument w IIS
+0

Czy korzystasz z systemu równoważenia obciążenia? Czy na pewno twoje przekierowania są dokładnie takie same (tj. Nie http versus https)? – Paddy

+0

przekierowania są dokładnie takie same. Brak https. Nie sądzę, że jestem za równoważeniem obciążenia. –

+1

Czy twoja strona używa jakiegoś rodzaju przekierowania na, powiedzmy, wygaśnięcia sesji do Login.aspx? – Ross

Odpowiedz

2

Wystąpił problem. Znaleziono tę logikę w MasterPage:

Dim strPage As String = Request.Url.AbsolutePath.Replace("/", "") 
    'Check that user is logged in 
    If Not strPage = "Login.aspx" And Not strPage = "Register.aspx" Then 
     If Session("intUserId") Is Nothing Then 
      Response.Redirect("~/Login.aspx", True) 
     End If 
    End If 

Najwyraźniej strPage nie równa Login.aspx podczas przeglądania do Login.aspx na serwerze.

Powinienem był to docenić, kiedy prowadziłem śledztwo. Dzięki Ross za komentarz, pomógł mi to znaleźć!

3

Podzielę się tym na wypadek, gdyby to była odpowiedź, ponieważ brzmi to jak problem, który mieliśmy.

  1. Strona ASP.net MVC z atrybutem [RequiresHttps] na naszej akcji logowania.

  2. Za układem równoważenia obciążenia, który wykonywał akcelerację protokołu SSL (w wyniku czego żądanie, które faktycznie uderza w kod po stronie serwera, jest już zdekodowane i skutecznie pod http).

  3. Kod serwera uważa, że ​​jest to problem i przekierowuje z powrotem do siebie za pomocą protokołu HTTPS.

  4. Przepłucz i powtórz.

+0

Dzięki za udostępnienie, ale nie sądzę, że to jest mój problem. Nie używam MVC, SSL ani równoważenia obciążenia. –

+1

Mmm, więc nie identyczne, ale warto byłoby szukać jakichkolwiek klas bazowych/kodu globalnego, które wykonują przekierowania, aby sprawdzić, czy można tam coś zauważyć. – Paddy

+0

@Paddy - Mam DOKŁADNIE ten problem za mechanizmem równoważenia obciążenia w przestrzeni dyskowej. Udało ci się go rozwiązać? –

0

Napotkałem podobny błąd. Ale mój był literówka z dwoma z powrotem do tyłu.

If (conditon1){ 
    Response.Redirect("Page1.aspx"); 
} 
If (conditon2){ 
    Response.Redirect("Page2.aspx"); 
} 

I poprawka była po prostu umieścić drugą jeśli w bloku inny.