所有,我有一個自定義對象,我用VB.NET(.net 2.0)編寫。該對象實例化自己的threading.timer對象,並執行一些後臺進程,包括根據數據庫中檢測到的數據,通過smtp通過定期詢問oracle數據庫和發送電子郵件。以下是Windows服務類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方法上面的代碼後的代碼。所有功能都通過了從VS2005部署到我的開發PC上的測試,但是當部署在真正的目標計算機上時,該服務將無法啓動並響應以下消息:
「本地計算機上的服務已啓動,然後停止.. 。「
我是否正在以這種正確的方式去做?如果不是,我怎麼才能在Windows服務類的範圍內最好地實現我的事件管理器。對事件管理者實施定時器似乎毫無意義,因爲這已經實現了自己的定時器...
任何幫助非常感謝。
親切的問候
的Paul J.
Betcha你在服務器上的nhibernate配置是錯誤的。除此之外,拋出一些日誌記錄,以便找出導致它失敗的原因。 – Will 2010-03-30 16:25:03
另外,在服務中使用計時器可能不是很好的設計。如果您的服務只按照計劃活動,那麼它應該是一個計劃任務。服務應該總是在應用程序上。 – Will 2010-03-30 16:26:26
請問,該進程每兩秒輪詢數據庫以獲取新數據。我會嘗試在服務類中加入一些額外的日誌記錄,看它是否顯示任何有用的東西。感謝您的意見。 – 2010-03-31 09:23:21