全部,我有一个自定义对象,我用VB.NET(.net 2.0)编写。该对象实例化其自己的threading.timer对象并执行许多后台进程,包括定期询问oracle数据库以及根据数据库中检测到的数据通过smtp发送电子邮件。以下是Windows服务类
中实现的代码Public Class IncidentManagerService
'Fakes
Private _fakeRepoFactory As IRepoFactory
Private _incidentRepo As FakeIncidentRepo
Private _incidentDefinitionRepo As FakeIncidentDefinitionRepo
Private _incManager As IncidentManager.Session
'Real
Private _started As Boolean = False
Private _repoFactory As New NHibernateRepoFactory
Private _psalertsEventRepo As IPsalertsEventRepo = _repoFactory.GetPsalertsEventRepo()
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.
If Not _started Then
Startup()
_started = True
End If
End Sub
Protected Overrides Sub OnStop()
'Tear down class variables in order to ensure the service stops cleanly
_incManager.Dispose()
_incidentDefinitionRepo = Nothing
_incidentRepo = Nothing
_fakeRepoFactory = Nothing
_repoFactory = Nothing
End Sub
Private Sub Startup()
Dim incidents As IList(Of Incident) = Nothing
Dim incidentFactory As New IncidentFactory
incidents = IncidentFactory.GetTwoFakeIncidents
_repoFactory = New NHibernateRepoFactory
_fakeRepoFactory = New FakeRepoFactory(incidents)
_incidentRepo = _fakeRepoFactory.GetIncidentRepo
_incidentDefinitionRepo = _fakeRepoFactory.GetIncidentDefinitionRepo
'Start an incident manager session
_incManager = New IncidentManager.Session(_incidentRepo, _incidentDefinitionRepo, _psalertsEventRepo)
_incManager.Start()
End Sub
End Class
经过一些实验,我在OnStart方法中得到了上面的代码。在我的开发PC上从VS2005部署时,所有功能都通过了测试,但是当部署在真正的目标计算机上时,该服务将无法启动并响应以下消息:
“本地计算机上的服务已启动,然后停止......”
我是否以正确的方式进行此操作?如果不是,我怎样才能在Windows服务类的范围内最好地实现我的事件管理器。为事件管理器实现一个计时器似乎毫无意义,因为它已经实现了自己的计时器......
非常感谢任何帮助。
亲切的问候
Paul J.
答案 0 :(得分:1)
我有几点建议。
首先,Windows服务必须能够在设定的一段时间内成功启动(默认情况下我认为是30秒)。您收到的错误消息并未指出这是一个问题,但您可能希望在服务的OnStart中启动快速计时器,并在TimerElapsed事件处理程序中启动您的启动过程。这样可以保证每次都开始服务。
其次,正如一些评论中所建议的那样,您必须向您的应用添加日志记录。每个好的服务都应该能够记录在跟踪问题时有用的一切。大多数常见的日志记录框架都允许您设置不同的详细级别,以便在运行良好时日志更小。