HTTPListener的Win7服务在一个请求后停止响应

时间:2012-07-08 13:08:01

标签: c# http windows-7 service listener

我是新手c#开发者 - 尝试编写一个简单的win7服务。

该服务应启动HTTPListener并侦听传入的浏览器请求,当收到请求时,它会返回响应并继续侦听其他请求。 我不需要处理并行性,因为一次只能有一个请求(非常短)。

我使用了以下代码,但在第一次响应后,服务停止响应。 我可能需要一个循环,但我不熟悉API,所以我可能也错了我正在做的。

感谢您的帮助。

    protected override void OnStart(string[] args)
    {
        HttpListener listener = new HttpListener();
        listener.Prefixes.Add("http://localhost:9999/");
        listener.Start();

        listener.BeginGetContext(new AsyncCallback(OnRequestReceive), listener);
     }

    private void OnRequestReceive(IAsyncResult result)
    {
        HttpListener listener = (HttpListener)result.AsyncState;
        HttpListenerContext context = listener.EndGetContext(result);
        HttpListenerResponse response = context.Response;
        byte[] buff = {1,2,3};

        response.Close(buff, true);
    } 

1 个答案:

答案 0 :(得分:5)

你快到了!收到一个请求后,您需要开始侦听另一个请求。

private void OnRequestReceive(IAsyncResult result) 
{ 
    HttpListener listener = (HttpListener)result.AsyncState; 

    HttpListenerContext context = listener.EndGetContext(result); 
    HttpListenerResponse response = context.Response; 
    byte[] buff = {1,2,3}; 

    response.Close(buff, true); 

    // ---> start listening for another request
    listener.BeginGetContext(new AsyncCallback(OnRequestReceive), listener); 
}