定期在后台现场执行代码块
本文关键字:执行 代码 现场 后台 | 更新日期: 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)都为您提供了安排页面按特定计划加载的功能 - 这将是最简单的方法在这种情况下执行此操作。