如何自动化使用web服务的任务



我有一个winform应用程序需要使用web服务。Web服务检查数据库中的任何更改。如果数据库中有任何更改,应该通知winform应用程序,并相应地执行一些任务。我怎么做呢?

我想到在我的winform应用程序中使用定时器,然后说每5分钟连接到一个web服务,并检查是否在数据库中进行了新的更改。还有别的办法吗?

更新:

我在这里张贴的代码基础上的答案:

类performtask{

    public static bool checkIfInProgress { get; set; }
    public static void InitializeWebService()
    {
        try
        {
            Timer = new System.Timers.Timer(2000);
            Timer.Elapsed += OnTimedEvent;
            Timer.Enabled = true;
        }
     }
     private static void callService()
     {
        using (var service = new WebServiceSoapClient())
        {
            checkIfInProgress = true;
            task1();
            task2();
            popMessage();
            checkIfInProgress = false;
        }
     }
     private static void OnTimedEvent(Object source, ElapsedEventArgs e)
     {
        if (checkIfInProgress == false)
        {
            callService();
        }
     }
     private static void PpopMessage()
     {
         var form = new Form
            {
                StartPosition = FormStartPosition.Manual,
                ShowInTaskbar = false,
                Text = "Message",
                Size = new Size(500, 200),
             };
            var screen = Screen.FromPoint(form.Location);
            Label lblText = new Label();
            lblText.Text ="Test Text";
            lblText.Dock = DockStyle.Fill;
            lblText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            form.MaximizeBox = false;
            form.Controls.Add(lblText);
            form.Location = new Point(screen.WorkingArea.Right - form.Width, screen.WorkingArea.Bottom - form.Height);
            form.Show();
     }

现在一切都很好,除了一个任务,即popMessage(代码片段在顶部)。这里的表单是打开的,但它似乎总是在加载。在使用之前,它曾经工作得很好。我该如何处理呢?

这是唯一的方法,特别是如果web服务不是基于wcf的,或者如果你无法修改它。

如果你正在使用定时器,只要确保你使用system . timer . timer并遵循这里的说明,以便在UI线程上执行Elapsed处理程序。此外,当计时器滴答作响时,您可能应该生成一个发出服务调用的工作线程(或Task,或等待异步方法)。当服务调用正在进行时,你不希望你的UI被阻塞。

如果您可以控制web服务,那么您可能想要探索WCF双工服务,它允许您从服务内部回调客户端。

SignalR允许您实现Web服务来实时地做这件事(不需要计时器或更新之间的延迟)。它允许你在客户端和服务器之间建立一个持久的连接,然后服务器可以在任何时候使用传输堆栈向客户端发送消息;WebSockets,服务器发送事件,永久帧和长轮询)基于可用的支持。

您可以使用SignalR建立连接,并在服务器上发生某些事情(例如您提到的数据库更改)时向需要通知的所有客户端广播。如:

Clients.All.notifyDatabaseChanged(args);

相关内容

  • 没有找到相关文章

最新更新