1

Visual Studio Express 2012を使用してVB.NetでWindowsサービスを作成しようとしています。基本的に必要なのは、サービスがN分ごとに事前に定義されたURLにHTTPGET要求を送信することです。ハートビートのようなものなので、サーバーが実行中でオンラインになっていることがわかります。

Windowsサーバーを作成し、プロジェクトを.EXEにビルドしてから、InstallUtilを使用してサービスとしてインストールするところまで行ってきました。これは機能しているようです。私はここのチュートリアルに従います:http://www.dotheweb.net/2009/11/creating-services-with-vb-express/

チュートリアルから、Windowsシステムログに書き込むコードの一部を削除しました(つまり、新しいログが作成されると思います)。これは、私のバージョンのVisualStudioでは何らかの理由で機能しないためです。

次のコードを使用して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

そして、タイマーの経過イベントを処理します

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 に答える