2

データベーステーブルを定期的にチェックしたかったので、Webサービスを作成するにはどうすればよいですか、またそれを構成するにはどうすればよいですか。

4

3 に答える 3

1

基本的に必要なのは、常に実行されているため、定期的に呼び出しを行うことができるものです。

それを行うにはいくつかの方法があります

  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. これは、SSIS パッケージを SQL ジョブに統合する方法です
  4. これは、Windows サービスを作成する方法です。
  5. これは、SSIS パッケージを作成する方法です
  6. これは、ほとんどすべての回答/チュートリアルを取得する方法です

例:

これらすべての中で最も単純なのは、Windows サービスです。Windows サービスを作成してマシン (サーバー) でホストするのは非常に簡単です。指定されたリンクの 1 つ (特に最後のリンク) を使用してください。通常、Windows サービスでは、OnStartイベントで何らかのアクティビティを行います。この中にタイマーを配置しOnStartTimerTick()、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 アクティビティにラップします。それはあなたにアイデアを与えるでしょう。

于 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 に答える