I created simple HttpListener that listens to port 9090 and depending on a request's URL writes some info to the console.
But I'm stuck :( I thought of multithreading, event based system, but I dind't manage to do anything with it.
Here is the code of my listener that I launched as a separate console app:
string urlTemplate = String.Format("/prefix/{0}/suffix", id); string prefix = String.Format("http://localhost:9090/"); HttpListener listener = new HttpListener(); listener.Prefixes.Add(prefix); listener.Start(); Console.WriteLine("Listening to {0}...", prefix); while (true) { HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; //Response object HttpListenerResponse response = context.Response; //Construct response if (request.RawUrl.Contains(urlTemplate) && request.HttpMethod == "POST") { string requestBody; Stream iStream = request.InputStream; Encoding encoding = request.ContentEncoding; StreamReader reader = new StreamReader(iStream, encoding); requestBody = reader.ReadToEnd(); Console.WriteLine("POST request on {0} with body = [{1}]", request.RawUrl, requestBody); response.StatusCode = (int)HttpStatusCode.OK; //Return a response using (Stream stream = response.OutputStream) { } } else { response.StatusCode = (int)HttpStatusCode.BadRequest; Console.WriteLine("Invalid HTTP request: [{0}] {1}", request.HttpMethod, request.Url); using (Stream stream = response.OutputStream) { } } } I decided to use it as an utility for unit tests (maybe somewhere else). So when test starts I need to configure the listener, run it, then make some requests and receive the info (which listener wrote earlier to Console), and at the end of the test stop the listener.
My main idea was to incapsulate this listener to separate class MyHttpListener which has methods: StartListener(), StopListener().
But when I call StartListener() my test freezes because of infinite while loop. I tried to create separate background thread or event based system, but my lack of experience with them, prevents me from doing it. I've already spent a lot of time trying to find the solution, but all for nothing.
Hope you can help me finding the solution for such trivial task.
Thanks in advance.