我有一个非常有趣的问题。我有一个asp.net的网站。我需要的是独立服务,它应该始终在后台运行。例如,我可以在特定日期执行一些数据库操作。而且无需向某人提出请求。只是独立的。我应该遵循哪种方法? 每个想法都会被愉快地接受。感谢
答案 0 :(得分:0)
您应该实现另一个应用程序。您不需要任何请求,只需执行某项任务 - 然后再使用桌面应用程序。如果您需要提供UI然后使用WPF或Win Forms,如果只执行某些任务,那么只使用控制台应用程序。要在特定时间运行它,您可以使用Windows任务计划程序。
答案 1 :(得分:0)
您需要一个外部应用程序,可以是在PC /服务器上运行的服务/程序,也可以是托管服务提供商的网络。 对于想法,如果您希望您的网站提供日程安排等,Windows Azure提供了一个调度服务,可以按给定的时间间隔调用Web地址(例如yourwebsite.com/runscheduler)。当调用此Web地址时,您的网站可以通过执行某些业务逻辑来对其进行操作。
答案 2 :(得分:0)
我建议您查看Revalee开源项目。
Revalee是一项服务,允许您安排Web回调到您的Web应用程序。在您的情况下,您将安排一个特定时间执行特定数据库操作的回调。 Revalee非常适用于离散事务操作的任务,例如更新某些数据库值或发送自动电子邮件消息(读取:不长时间运行)。执行操作的代码都将驻留在您的应用中。
要使用Revalee,您会:
在服务器上安装Revalee Service(Windows服务)。 Windows服务在源代码(您可以自己编译)或Revalee website中提供的预编译版本中提供。
在Visual Studio项目中使用Revalee客户端库。 (还有一个特定于MVC的版本。)客户端库在源代码中可用(您可以自己编译)或通过NuGet提供的预编译版本。
当您的代码调用ScheduleDbOperation()
方法时,您将注册将来的回调(此示例假设您需要在12小时后执行操作)。
private void ScheduleDbOperation()
{
DateTimeOffset callbackTime = DateTimeOffset.Now.AddHours(12.0);
// The callback should be in 12 hours from now
Uri callbackUrl = new Uri(string.Format("http://mywebapp.com/DbOperation.aspx"));
// Register the callback request with the Revalee service
RevaleeRegistrar.ScheduleCallback(callbackTime, callbackUrl);
}
当Revalee重新调用您的应用程序时,您的应用程序将执行您编写的任何操作。您可以通过将以下方法调用(DbOperation()
)添加到DbOperation.aspx
页面处理程序,àla:
private void DbOperation()
{
// TODO Lookup the job information and execute the database operation
// ...
return;
}
我希望这会有所帮助。
注意:上面的代码示例使用ScheduleCallback()
的同步版本,Revalee客户端库也支持异步调用àla:
RevaleeRegistrar.ScheduleCallbackAsync(callbackTime, callbackUrl);
如果上面不清楚,Revalee服务不是外部第三方在线调度程序服务,而是安装和在您自己的网络上完全控制的Windows服务。它驻留在您自己选择的服务器上并运行,很可能是您的Web服务器(但这不是必需的),它可以从ASP.NET应用程序接收回调注册请求。
免责声明:我是参与Revalee项目的开发人员之一。但需要明确的是,Revalee是免费的开源软件。源代码可在GitHub上找到。