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方法中停止计时器。