我想定期检查我的数据库表。那么我该如何创建一个网络服务以及如何配置它。
3 回答
基本上您需要的是始终运行的东西,因此可以定期调用。
有很多方法可以做到这一点
(因此从 ASP.NET 开始)您可以创建一个 Windows 服务,并将此服务托管在您的服务器上,因为服务器始终在运行,此 Windows 服务将向您的 Web 服务发出请求,更新数据库或您想要的任何水
您可以使用 SQL 作业来执行此操作。您可以通过 SSIS(Sql Server 集成服务)包从作业中调用 Web 服务。这些包本质上非常健壮,它们几乎可以执行您希望它们执行的任何数据库活动,包括 Web 服务请求。
最后,您可以使用第三方工具,例如 Quartz.Net
参考:
- 这就是您可以通过 Windows 服务调用 Web 服务的方式。
- 这就是您可以通过 ssis 包调用 Web 服务的方式。
- 这就是如何将 SSIS 包集成到 SQL 作业中
- 这就是创建 Windows 服务的方法
- 这是创建 SSIS 包的方法
- 这就是你如何获得几乎任何东西的答案/教程
例子:
所有这些中最简单的将是 Windows 服务。制作 Windows 服务并将其托管在机器(服务器)上非常容易,使用给定的链接之一(特别是最后一个链接)。通常,在 Windows 服务中,您会在事件中执行一些活动OnStart
。您可以在其中放置一个计时器,OnStart
然后TimerTick()
您可以请求您的网络服务。
像这样的东西:
class Program : ServiceBase
{
System.Timers.Timer timer;
static void Main(string[] args)
{
ServiceBase.Run(new Program());
}
public Program()
{
this.ServiceName = "My Service";
}
protected override void OnStart(string[] args)
{
base.OnStart(args);
InitializeTimer();
}
protected override void OnStop()
{
base.OnStop();
//TODO: clean up any variables and stop any threads
}
protected void InitializeTimer()
{
try
{
if (timer == null)
{
timer = new System.Timers.Timer();
timer.Enabled = true;
timer.AutoReset = true;
timer.Interval = 60000 * 1;
timer.Enabled = true;
timer.Elapsed += timer_Elapsed;
}
}
catch (Exception ex)
{
Utility.WriteLog("Exception InitialiseTimer : " + ex.Message.ToString());
}
finally
{
}
}
protected void timer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
{
TimerTick();
timer.Interval = 60000 * Convert.ToDouble(ConfigurationManager.AppSettings["TimerInerval"]);
}
private void TimerTick()
{
try
{
DownloadFromFTPandValidate objDownLoadandValidate = new DownloadFromFTPandValidate();
objDownLoadandValidate.ProcessMain();
}
catch (Exception ex)
{
Utility.WriteLog("Exception InitialiseTimer : " + ex.Message.ToString());
}
}
}
在这里,类DownloadFromFTPandValidate
将代码包装到 db 活动中。它给你一个想法。
您将需要定期任务的作业调度程序。我给你推荐一个好的。查看此链接:http: //quartznet.sourceforge.net/
为什么不在你的表上使用一个触发器,一旦数据被修改,它就会运行一个存储过程,然后使用xp_cmdshell从你的存储过程中访问命令行,这样你就可以运行例如批处理文件或其他任何东西。