定期在后台现场执行代码块

本文关键字:执行 代码 现场 后台 | 更新日期: 2023-09-27 18:33:00

我有一个 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; }
}

运行良好,但目前我通过按下页面上的按钮来执行它。这并不理想,因为必须有人记住按下按钮才能执行。当站点在服务器上处于活动状态时,是否有可能让站点每隔几个小时在后台执行此代码块?

定期在后台现场执行代码块

不要为此使用 Web 应用程序。 使用计划定期运行的 Windows 服务或控制台应用程序等内容。

Web 应用程序被设计为请求/响应系统。 他们监听请求(如按下页面上的按钮)并积极响应这些请求。 发送该响应后,应用程序将处于空闲状态。

此外,如果应用程序经常处于空闲状态,主机(Web 服务器)可以将其关闭,作为管理其资源的一部分。 因此,您不能依赖 Web 应用程序始终处于活动状态。 即使你可以,它仍然需要一个请求才能做任何事情。

Windows 服务始终在后台运行,并且可以使用Timer定期执行任务。 或者,可以将执行任务的控制台应用程序计划为定期运行。 (例如,通过Windows任务计划程序。

如果您有权访问服务器,即通过远程桌面,则可以根据需要随时使用任务调度器执行代码。

如果您没有这种访问权限,即您处于共享主机设置中,大多数大型主机(例如 discountasp.net)都为您提供了安排页面按特定计划加载的功能 - 这将是最简单的方法在这种情况下执行此操作。