Esempio n. 1
0
        private bool AddStateKeeperScript()
        {
            uint             minAllowedTimeout = 0; // в минутах
            HttpSessionState session           = HttpContext.Current.Session;

            if (session.Timeout > 0 && (session.Mode == SessionStateMode.StateServer || session.Mode == SessionStateMode.SQLServer))
            {
                minAllowedTimeout = (uint)session.Timeout;
            }

            ViewStateElement viewState = Globals.Settings.ViewState;

            if (viewState.Timeout > 0 && (viewState.Timeout < minAllowedTimeout || minAllowedTimeout == 0) && (viewState.ViewStateMode == ViewStateModes.InMsSql || viewState.ViewStateMode == ViewStateModes.InSession))
            {
                minAllowedTimeout = viewState.Timeout;
            }

            if (minAllowedTimeout <= 0)
            {
                return(false);
            }

            uint delta        = 180;                                   // задержка до закрытия сессии сервером
            var  alertTimeout = (int)(minAllowedTimeout * 60 - delta); // интервал в секундах по истечению которого произойдет обновление сессии

            while (alertTimeout <= 0)
            {
                delta       -= 30;
                alertTimeout = (int)(minAllowedTimeout * 60 - delta);
            }
            if (alertTimeout <= 0)
            {
                return(false);
            }


            string keeperScriptWs =
                String.Format(@"setInterval(function() {{$.post('{0}', $($get('__VIEWSTATE')).serialize()).fail(function() {{ location.reload(); }});}}, {1});",
                              ResolveUrl(@"~/checkstate.skhandler"), alertTimeout * 1000);

            //String.Format(@"setInterval(function(){{location.reload();}}, {0});", alertTimeout * 1000);

            if (ScriptManager.GetCurrent(Page) != null)
            {
                ScriptManager.RegisterStartupScript(this, GetType(), "keeperScriptWs", keeperScriptWs, true);
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(GetType(), "keeperScriptWs", keeperScriptWs, true);
            }

            return(true);
        }
        private bool AddStateKeeperScript()
        {
            uint             minAllowedTimeout = 0; // в минутах
            HttpSessionState session           = HttpContext.Current.Session;

            if (session != null && session.Timeout > 0 && (session.Mode == SessionStateMode.StateServer || session.Mode == SessionStateMode.SQLServer))
            {
                minAllowedTimeout = (uint)session.Timeout;
            }

            ViewStateElement viewState = Globals.Settings.ViewState;

            if (viewState.Timeout > 0 && (viewState.Timeout < minAllowedTimeout || minAllowedTimeout == 0) && (viewState.ViewStateMode == ViewStateModes.InMsSql || viewState.ViewStateMode == ViewStateModes.InSession))
            {
                minAllowedTimeout = viewState.Timeout;
            }

            if (minAllowedTimeout <= 0)
            {
                return(false);
            }

            uint delta        = 180;                                   // задержка до закрытия сессии сервером
            var  alertTimeout = (int)(minAllowedTimeout * 60 - delta); // интервал в секундах по истечению которого произойдет обновление сессии

            while (alertTimeout <= 0)
            {
                delta       -= 30;
                alertTimeout = (int)(minAllowedTimeout * 60 - delta);
            }
            if (alertTimeout <= 0)
            {
                return(false);
            }

            if (alertTimeout >= 2)
            {
                alertTimeout = alertTimeout / 2;
            }

            string keeperScriptWs =
                String.Format(@"setInterval(function() {{
                                                        $.post('{0}', {{""__VIEWSTATE"":$($get('__VIEWSTATE')).val(), ""__pingStamp"":$($get('__pingStamp')).val()}}).done(function(data) {{
                                                            if(data != ""OK"") {{
                                                                alert(""Извините! Данные на странице устарели, страница будет перезагружена."");
                                                                window.location.href = '{2}';
                                                            }} 
                                                        }}).fail(function() {{
                                                            alert(""Извините! Произошла ошибка связи с сервером, страница будет перезагружена."");
                                                            window.location.href = '{2}'; 
                                                        }});
                                                        var d = new Date();
                                                        $('#__pingStamp').val(d.getFullYear() + ""-"" + d.getMonth() + ""-"" + d.getDate() + "" "" + d.getHours() + ""."" + d.getMinutes() + ""."" + d.getSeconds() + ""."" + d.getMilliseconds());
                                                    }}, {1});",
                              Page.ResolveClientUrl(@"~/checkstate.skhandler"), alertTimeout * 1000, Page.ResolveClientUrl(@"~/"));

            //String.Format(@"setInterval(function(){{location.reload();}}, {0});", alertTimeout * 1000);

            //if (ScriptManager.GetCurrent(Page) != null)
            //    ScriptManager.RegisterStartupScript(Page, GetType(), "keeperScriptWs", keeperScriptWs, true);
            //else

            if (!Page.ClientScript.IsStartupScriptRegistered(GetType(), "keeperScriptWs"))
            {
                Page.ClientScript.RegisterStartupScript(GetType(), "keeperScriptWs", keeperScriptWs, true);
            }


            return(true);
        }