2

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

4

3 回答 3

1

基本上您需要的是始终运行的东西,因此可以定期调用。

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

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

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

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

参考:

  1. 就是您可以通过 Windows 服务调用 Web 服务的方式。
  2. 就是您可以通过 ssis 包调用 Web 服务的方式。
  3. 就是如何将 SSIS 包集成到 SQL 作业中
  4. 就是创建 Windows 服务的方法
  5. 是创建 SSIS 包的方法
  6. 就是你如何获得几乎任何东西的答案/教程

例子:

所有这些中最简单的将是 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 活动中。它给你一个想法。

于 2013-01-31T07:00:47.380 回答
0

您将需要定期任务的作业调度程序。我给你推荐一个好的。查看此链接:http: //quartznet.sourceforge.net/

于 2013-01-31T06:54:50.633 回答
0

为什么不在你的表上使用一个触发器,一旦数据被修改,它就会运行一个存储过程,然后使用xp_cmdshell从你的存储过程中访问命令行,这样你就可以运行例如批处理文件或其他任何东西。

于 2013-01-31T07:00:21.013 回答