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; }
}

它工作得很好,但目前我通过按下页面上的按钮来执行它。这并不理想,因为有人必须记住按下按钮才能执行。当站点在服务器上运行时,是否有可能让站点每隔几个小时在幕后执行这段代码?

4

2 回答 2

2

不要为此使用 Web 应用程序。使用计划定期运行的 Windows 服务或控制台应用程序之类的东西。

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

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

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

于 2013-09-26T18:22:16.417 回答
0

如果您可以访问服务器,即通过远程桌面,您可以使用任务调度程序尽可能频繁地执行代码。

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

于 2013-09-26T18:23:19.043 回答