我如何创建一个网络服务,该服务定期检查 asp.net 数据库中的一些表



我想定期检查我的数据库表。那么如何创建 Web 服务以及如何配置它。

基本上你需要

的是,它总是在运行,因此可以进行定期调用。

有很多方法可以做到这一点

  1. (自 ASP.NET 以来)您可以创建一个Windows服务,并在您的服务器上托管此服务,因为服务器始终运行,因此此Windows服务将向您的Web服务,更新数据库或您想要的任何内容发出请求

  2. 可以使用 SQL 作业来执行此操作。可以通过 SSIS(SQL Server Integration Service)包从作业调用 Web 服务。这些包本质上非常非常健壮,它们几乎可以执行您希望它们执行的任何数据库活动,包括 Web 服务请求。

  3. 最后,您可以使用第三方工具,例如 Quartz.Net

引用:

  1. 这就是通过 Windows 服务调用 Web 服务的方式。
  2. 这是通过 SSIS 包调用 Web 服务的方法。
  3. 这是在 SQL 作业中集成 SSIS 包的方法
  4. 这是创建Windows服务的方法
  5. 这是创建 SSIS 包的方法
  6. 这就是您获得几乎所有问题的答案/教程的方式

例:

所有这些中最简单的是Windows服务。制作Windows服务并将其托管在机器(服务器)上非常简单,请使用给定的链接之一(特别是最后一个链接)。通常,在 Windows 服务中,您会OnStart事件中执行一些活动。您可以在此OnStart中放置一个计时器,在TimerTick() 时,您可以请求您的 Web 服务。

像这样:

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访问存储过程的命令行,以便您可以运行例如批处理文件或其他任何内容。

最新更新