2013-09-26 14 views
1

我有一個ASP.NET方法,它從數據庫中提取用戶數據併爲我正在構建的Web應用程序的用戶創建登錄憑據。定期在幕後執行一段代碼

var userDataList = new List<UserInfo>(); 
    SqlConnection conn = new SqlConnection(); 
    conn.ConnectionString = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString; 
    try 
    { 
     //open SQL connection 
     conn.Open(); 
     SqlCommand getSumOfHours = new SqlCommand("SELECT LoginName, Email FROM [User] WHERE Deleted IS NULL", conn); 
     //execute command and retrieve primary key from the above insert and assign to variable 
     SqlDataReader reader = getSumOfHours.ExecuteReader(); 
     while (reader.Read()) 
     { 
      userDataList.Add(new UserInfo 
      { 
       userName = reader.GetString(0), 
       email = reader.GetString(1) 
      }); 
     } 
    } 
    catch (Exception ex) 
    { 
     System.Diagnostics.Debug.Write(ex.ToString()); 
    } 
    finally 
    { 
     conn.Close(); 
    } 

    foreach (var item in userDataList) 
    { 
     //System.Diagnostics.Debug.WriteLine(item.userName + " " + item.email); 
     if (!(Roles.RoleExists("user"))) 
     { 
      Roles.CreateRole("user"); 
     } 
     if (Membership.GetUser(item.userName) == null) 
     { 
      Membership.CreateUser(item.userName, "password", item.email); 
      Roles.AddUserToRole(item.userName, "user"); 
     } 
    } 
} 
public class UserInfo 
{ 
    public string userName { get; set; } 
    public string email { get; set; } 
} 

它完美的工作,但目前我通過按下頁面上的按鈕執行它。這並不理想,因爲有人必須記住按下按鈕才能執行。當站點在服務器上時,是否有可能讓站點每隔幾個小時在幕後執行這段代碼?

+1

將其設置爲控制檯應用程序並設置SQL作業或Windows任務。 –

回答

2

請勿爲此使用Web應用程序。使用類似Windows服務或計劃定期運行的控制檯應用程序。

Web應用程序被設計爲請求/響應系統。他們傾聽請求(如按頁面上的按鈕)並積極響應這些請求。一旦發送了該響應,應用程序就會處於空閒狀態。此外,如果應用程序閒置很多,主機(網絡服務器)可以關閉它作爲管理其資源的一部分。所以你不能依靠一個web應用程序總是積極運行。即使你可以,它仍然需要一個請求來做任何事情。

Windows服務始終在後臺運行,並且可以使用Timer定期執行任務。或者執行任務的控制檯應用程序可以安排定期運行。 (例如,通過Windows任務計劃程序)。

+0

好的,會做的。可以與System.Web.Security進行交互,並且它是控制檯應用程序中的成員資格api? –

+0

@DavidTunnell:可以加載該名稱空間,但Web應用程序的上下文不存在。你需要用這個命名空間做什麼?控制檯應用程序不應該作爲Web用戶進行身份驗證。 – David

+0

我正在使用它爲Web應用程序創建用戶憑據 –

0

如果您有權訪問服務器,即通過遠程桌面,則可以使用任務調度程序按需要隨時執行代碼。

如果您沒有這種訪問權限,即您處於共享主機設置中,則大多數大型主機(例如discountasp.net)都提供了您計劃加載頁面的功能一定的時間表 - 這將是在這種情況下最簡單的方法。