2013-09-26 15 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)都提供了您计划加载页面的功能一定的时间表 - 这将是在这种情况下最简单的方法。