Visual Studio Express 2012 - Windows服务VB.net - 访问计时器上的URL

问题描述:

我想在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服务本身时,我没有收到任何电子邮件,但是我没有在任何地方出现任何错误。

我的猜测是你使用的是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方法中停止计时器。