计时器未在Windows服务应用程序中运行

时间:2010-02-06 12:12:54

标签: windows-services timer

我有一个应用程序,它从Web数据库中读取一些数据并定期更新本地数据库。每隔5分钟说一次。

这是一个交互式Windows应用程序的形式。但由于此应用程序必须连续运行,我们决定制作Windows服务应用程序。

我们在应用程序中使用了定时器,它们被设置为5分钟的间隔,并且在计时器的每个滴答中,我们都在检查Web更新。

我们在服务中也做了同样的事情。但似乎计时器现在没有运行。以下是该服务的几种方法:

Protected Overrides Sub OnStart(ByVal args() As String)
    ' Add code here to start your service. This method should set things
    ' in motion so your service can do its work.

    'connect to sap business one
    If Connect("rlap1", "sa", "dracula", "UnimaxNew", "manager", "manager") = False Then
        End
        SyncEvents.WriteEntry("Unable to connect to SAP Business One, " & oCompany.GetLastErrorDescription, EventLogEntryType.Error)
    Else
        SyncEvents.WriteEntry("Connected to SAP Business One.", EventLogEntryType.Information)
    End If

    'start the timers
    WebTimer.Start()
    SapTimer.Start()
    DataTimer.Start()

    SyncEvents.WriteEntry("Synchronization process started.")
End Sub
Protected Overrides Sub OnStop()
    ' Add code here to perform any tear-down necessary to stop your service.
    oCompany.Disconnect()
    SyncEvents.WriteEntry("Disconnected from SAP Business One.", EventLogEntryType.Information)

    'stop the timers
    WebTimer.Stop()
    SapTimer.Stop()
    DataTimer.Stop()

    SyncEvents.WriteEntry("Synchronization process stopped.")
End Sub
Private Sub WebTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles WebTimer.Tick
    SyncEvents.WriteEntry("Checking for new orders.")
    CheckOrder()
End Sub
Private Sub SapTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SapTimer.Tick
    SyncEvents.WriteEntry("Checking for new deliveries.")
    CheckDelivery()
End Sub
Private Sub DataTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataTimer.Tick
    SyncEvents.WriteEntry("Checking for stock updates.")
    CheckStock()
End Sub

消息在事件日志中正确记录 - 当我们启动或停止服务时。但是定时器功能没有消息。我也试过调试服务 - 在Visual Studio中使用Attach To Process ..但是,即使代码从未在任何tick函数中破坏。

我们不能在服务中使用计时器吗?如果不是,那么另一种方式是什么。如果是的话,这里可能出现什么问题?

由于 Rahul Jain

1 个答案:

答案 0 :(得分:0)

没有什么可以阻止计时器在Windows服务中工作。听起来像是计时器没有配置为自动重置,但是不知道你正在使用什么计时器(System.Timers.Timer?System.Threading.Timer?Other?)以及它是如何配置的,它是不可能知道的肯定的。

关于调试服务,在OnStart()方法中放入以下代码“programmatic breakpoint”:

System.Diagnostics.Debugger.Break();

启动服务时,系统会提示您输入调试会话,执行将在此行中断。你可以从那里正常调试。