2013-03-17 75 views
1

我想在VB.Net中使用visual studio express 2012創建一個Windows服務。基本上我想要的是服務發送一個HTTP GET每N分鐘請求一個預定義的URL。有點像心跳,所以我們知道服務器正在運行並聯機。Visual Studio Express 2012 - Windows服務VB.net - 訪問計時器上的URL

我已經儘可能創建Windows服務器,將項目構建爲.EXE,然後使用InstallUtil將其安裝爲服務。這似乎工作,我按照教程在這裏:http://www.dotheweb.net/2009/11/creating-services-with-vb-express/

我刪除了一些代碼從教程寫入Windows系統日誌(或者更確切地說,我認爲它創建一個新的日誌),因爲這是行不通的與我的版本的Visual Studio出於某種原因。

我使用下面的代碼來發送HTTP請求:

Dim url As String = "http://someURL.com/test.php" 
Dim request As WebRequest = WebRequest.Create(url) 
request.Method = "GET" 
Dim response As WebResponse = request.GetResponse() 

的PHP文件只是向我發送一封電子郵件,當它被訪問。

當我從Visual Studio中運行項目時(如果我忽略通知我一個Windows服務項目不應該像這樣運行並讓它繼續運行,我開始收到電子郵件),代碼就可以正常工作。

但是,當我啓動Windows服務本身時,我沒有收到任何電子郵件,但是我沒有在任何地方出現任何錯誤。

回答

0

我的猜測是你使用的是System.Windows.Forms.Timer。沒有System.Windows.Forms.Form,該計時器將無法工作。在Windows服務中使用的計時器是System.Timers.Timer

聲明它在你的服務類

Private WithEvents m_timer As System.Timers.Timer 

在OnStart方法啓動它:

 m_timer = New System.Timers.Timer(300000)  ' 5 minutes 
    m_timer.Enabled = True 

和處理經過的事件的計時器

Private Sub m_timer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles m_timer.Elapsed 

    m_timer.Enabled = False 

    Dim url As String = "http://someURL.com/test.php" 
    Dim request As WebRequest = WebRequest.Create(url) 
    request.Method = "GET" 
    Dim response As WebResponse = request.GetResponse() 

    m_timer.Enabled = True 

End Sub 

不要忘記在OnStop方法中停止計時器。