• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 260
  • Last Modified:

Test Windows Service

In Visual STudio 2010 is there a "best practice" for testing a WIndows Service?
0
lrbrister
Asked:
lrbrister
  • 5
  • 4
  • 2
  • +1
1 Solution
 
CodeCruiserCommented:
0
 
käµfm³d 👽Commented:
@CodeCruiser

Applies to: Windows Communication Foundation
Did you post the wrong link?

@Irbrister

When you say "test," what do you mean? Unit testing? Functional testing? etc.
0
 
lrbristerAuthor Commented:
kaufmed

I'm making an HTTP Listener on a WIndows Service

What is the best way to go about doing this and being able to test?
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
CodeCruiserCommented:
@kaufmed

Yes did not notice that.
0
 
käµfm³d 👽Commented:
Have you already developed the service?
0
 
lrbristerAuthor Commented:
kaufmed,
 Yes.

I installed it but can't figure out how to see if the ReportListener() Sub is actually doing anything

The other parts are writing to file


Imports System.Net
Imports System.Threading
Imports System.Xml
Imports System.IO

Public Class ngListener
    Private StatusThread As Thread
    Private sFileName As String = "C:/temp/winServiceStart.txt"

    Protected Overrides Sub OnStart(ByVal args() As String)
        ' Add code here to start your service. This method should set things
        ' in motion so your service can do its work.
        FileWriteline(sFileName, "Started: " & Now().ToString())

        StatusThread = New Thread(New ThreadStart(AddressOf ReportListener))
        StatusThread.Start()
    End Sub

    Protected Overrides Sub OnStop()
        ' Add code here to perform any tear-down necessary to stop your service.
    End Sub


    Public Sub ReportListener()
        Dim listener As New HttpListener()
        listener.Prefixes.Add("http://+:60010/")
        listener.Start()
        Try
            While True
                Dim result As IAsyncResult = listener.BeginGetContext(New AsyncCallback(AddressOf ListenerGetContextCallback), listener)
                result.AsyncWaitHandle.WaitOne()
                FileWriteline(sFileName, "Made it to line 32")
            End While
        Catch generatedExceptionName As ThreadAbortException
            FileWriteline(sFileName, "Exception at: " & Now().ToString())
            listener.Close()
        End Try
    End Sub

    Public Sub ListenerGetContextCallback(ar As IAsyncResult)
        Dim listener As HttpListener = DirectCast(ar.AsyncState, HttpListener)
        If listener.IsListening Then
            Dim ExportURL As String = ""
            ' Call EndGetContext to complete the asynchronous operation.
            Dim context As HttpListenerContext = listener.EndGetContext(ar)
            Dim request As HttpListenerRequest = context.Request
            ' Obtain a response object.
            Dim response As HttpListenerResponse = context.Response
            ' Construct a response.
            If request.HttpMethod = "POST" Then
                Try
                    Dim d As New XmlDocument()
                    ' PROCESS YOUR XML HERE
                    d.Load(request.InputStream)
                    FileWriteline(sFileName, d.ToString())
                Catch e As Exception
                End Try
                ' HANDLE A GET HERE
            Else
            End If
            ' CONSTRUCT A RESPONSE
            Dim responseString As String = "<HTML><BODY>" & DateTime.Now.ToString() & "<br>" & "HTTP Method: " & request.HttpMethod.ToString() & "<br>" & "RequestURL: " & request.Url.ToString & "<br>" & "<br>" + "</BODY></HTML>"
            Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(responseString)
            ' Get a response stream and write the response to it.
            response.ContentLength64 = buffer.Length
            response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate")
            Dim output As System.IO.Stream = response.OutputStream
            output.Write(buffer, 0, buffer.Length)
            ' You must close the output stream.
            output.Close()
        Else
        End If
    End Sub


    Public Sub FileWriteline(ByVal sFilename As String, ByVal sLineToWrite As String)
        Try
            File.AppendAllText(sFilename, sLineToWrite & vbNewLine)
        Catch ex As Exception
        End Try
    End Sub
End Class

Open in new window

0
 
käµfm³d 👽Commented:
For what you are talking about, you would want to add in some logging to a file, or perhaps to the event log.

It is possible to run your application as a console application for testing, also. You just switch the type of project in the project properties from library to console application. Then just add in a Main that calls your OnStart method. You may need to put some code in Main to force it to block while you thread runs.
0
 
käµfm³d 👽Commented:
P.S.

You might want to move your listener.Start() line inside of the Try/Catch.
0
 
lrbristerAuthor Commented:
kaufmed
I'll try those exceptions.

Just when I was getting fairly comfortable in "regular" .Net projects...now they want me to do things completely outside my ex[erience.
0
 
lrbristerAuthor Commented:
kaufmed,
  I'm not able to tell if I'm getting insode the following Sub()
 Public Sub ListenerGetContextCallback(ar As IAsyncResult)

I can write to a text file inside the ReportListener() Sub

In the WHile True...
 I can write to file before and after this line
Dim result As IAsyncResult = listener.BeginGetContext(New AsyncCallback(AddressOf ListenerGetContextCallback), listener)

How would I output to file the result variable?
0
 
HaiFaiCommented:
Im currently testin(debugging)  my services like this
1 make installer to project
2 click installer in visual studio and install service
3 start service
4 attach debugger to service from visual studio (tools -- attach to process)
then just check if service is running like it should and you can pause service in code to specified like or so.
5 if you need to edit code ... just click installer project and remove then build project again and start again from step 2
0
 
lrbristerAuthor Commented:
Perfect
Thanks
0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 5
  • 4
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now