2013-06-14 6 views
0

Я внедрил отображаемое сообщение предупреждения для тайм-аута сеанса в приложении asp.net mvc2, используя следующую статью с некоторой настройкой в ​​соответствии с требованием:Какое влияние F5 loadbalancer на тайм-аут сеанса в приложении asp.net mvc2

http://fairwaytech.com/2012/01/handling-session-timeout-gracefully/

наряду со следующим состоянием сеанса режим:

<sessionState mode="SQLServer" sqlConnectionString="Data Source=StudentsDB;User ID=xxxxxxx;Password=xxxxxxx;Integrated Security=False;MultipleActiveResultSets=True" allowCustomSqlDatabase="true" cookieless="false" timeout="30" compressionEnabled="true" sqlCommandTimeout="240" /> 

Форма Timeout = 15 и Sessiontimeout = 30

Приложение работает отлично в моей среде разработки и деинтеграции (без нагрузки в обеих средах.

Когда я развернул приложение в QA и промежуточной среде, где есть доступная конфигурация нагрузки F5, он начал вести себя странно.

Для некоторых пользователей появляется всплывающее предупреждение, а некоторые другие пользователи вообще не появляются, и иногда он выходит из системы автоматически.

Функциональность не работает должным образом и ведет себя странно.

На F5 loadbalancer нет липких сеансов.

В Global.asax.cs файле У меня есть следующий код:

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) 
    { 
     Only access session state if it is available 
     if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState) 
     { 
      //If we are authenticated AND we don't have a session here.. redirect to login page. 
      HttpCookie authenticationCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
      if (authenticationCookie != null) 
      { 
       FormsAuthenticationTicket authenticationTicket = FormsAuthentication.Decrypt(authenticationCookie.Value); 
       if (!authenticationTicket.Expired) 
       { 
        //of course.. replace ANYKNOWNVALUEHERETOCHECK with "UserId" or something you set on the login that you can check here to see if its empty. 
        if (Session["IsSessionValid"] == null) 
        { 
         //This means for some reason the session expired before the authentication ticket. Force a login. 
         FormsAuthentication.SignOut(); 
         Response.Redirect(FormsAuthentication.LoginUrl, true); 
         return; 
        } 
       } 
      } 
     }    
    } 

Я попытался проверить код и все вещи на моем Devlopment и devintegration среды и ничего не нашел много. Может ли кто-нибудь помочь мне узнать возможные причины вышеупомянутой проблемы?

Благодарности & С уважением, Сантош Кумар Patro

ответ

0

Для устранения неполадок вопрос, я спросил парня инфраструктуры остановиться на сервера и держать другой сервер и работает. При проверке проблемы мы обнаружили, что функция предупреждения таймаута сеанса работает должным образом. Таким образом, я убедился, что F5 loadbalancer не влияет на функциональность тайм-аута сеанса. На основании анализа я обнаружил, что у меня нет MachineKey тега в web.config и, пройдя через некоторые статьи, как указано ниже:

http://aspalliance.com/383_SQL_Server_Session_State_on_a_Web_Farm http://www.hanselman.com/blog/LoadBalancingAndASPNET.aspxhttp://dotnet.dzone.com/news/aspnet-and-load-balancing

Я включил MachineKey тег и подготовил пакет и развернуть его на обоих серверах, а затем снова подтвердил функциональность. Я обнаружил, что функциональность работает как ожидалось.