1

我正在尝试使用 Visual Studio Express 2012 在 VB.Net 中创建 Windows 服务。基本上我想要的只是让该服务每 N 分钟向预先确定的 URL 发送一个 HTTP GET 请求。有点像心跳,所以我们知道服务器正在运行并且在线。

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

4

1 回答 1

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

并处理定时器的Elapsed事件

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

于 2013-03-17T16:04:31.587 回答