程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 讓你的網站“心跳”起來

讓你的網站“心跳”起來

編輯:關於ASP.NET

有時候你希望你的頁面“一直活著”。也就是說,如果一個用戶填寫一個復雜的表單 ,在用戶完成之前。你一定不希望session過期。否者用戶可能因此變得非常惱怒。

這也不是簡單的加長session過期時間的事情。如果你這樣做,當訪問頁面的用戶離開 這個網站,session將會仍舊存活在服務器的內存中很長一段時間。增加session過期時間 是一個解決辦法,但是它不是一個很好的解決辦法。

我的目標是:一旦網頁在客戶端被打開,session就一直激活。即使沒有任何回發來重 設session的時間。當網頁關閉的時候,session將自然結束。

我這樣來實現這個解決方案:在客戶端每隔一段時間就去"ping"服務端,這個時間少 於session的過期時間。這就是Heartbeat設計模式。

麻煩的設置:

為了達到測試的目的。我在web.config中設置session超時時間為2分鐘。

1 <system.web>
2   <sessionState  timeout="2">
3   </sessionState>
4   </system.web>

為了追蹤具體發生了什麼,使用一個公用的函數ODS(在MiscUtilities類中)

1 // ---- ODS (Output Debug String) ----------------------
2 public static void ODS(string Msg)
3 {
4     String  Out = String.Format("{0}  {1}", DateTime.Now.ToString("hh:mm:ss.ff"),  Msg);
5     System.Diagnostics.Debug.WriteLine(Out);
6 }
7

為了觀察session的狀態事件,我在global.asax中添加用於調試的字符串。

1 <%@ Application Language="C#" %>
2 <script  RunAt="server">
3
4     void Application_Start(object sender,  EventArgs e)
5     {
6         MiscUtilities.ODS ("****ApplicationStart");
7     }
8     void Session_Start (object sender, EventArgs e)
9     {
10          MiscUtilities.ODS("Session_Start");
11     }
12     void  Session_End(object sender, EventArgs e)
13     {
14          MiscUtilities.ODS("Session_End");
15     }
16

下面是詳細步驟:由於我們需要在服務端有一個方法供客戶端調用。故使用一個 WebMethod方法。

1、在頁面上我們必須有一個ScriptManager

2、ScriptManager 的EnablePageMethods 必須設置成true

3、WebMethod 方法必須是public和static的

4、WebMethod 方法必須將EnableSession屬性設置成true

1 <asp:ScriptManager ID="ScriptManager1" runat="server"
2      EnablePageMethods="true">
3  </asp:ScriptManager>

1 public partial class _Default : System.Web.UI.Page
2  {
3     [WebMethod(EnableSession=true ) ]
4     public  static void PokePage()
5     {
6         // called by  client to refresh session
7         MiscUtilities.ODS ("Server: I am poked");
8     }
9

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved