2

私は初心者の C# 開発者です。単純な win7 サービスを作成しようとしています。

このサービスは、HTTPListener を開始し、着信ブラウザー リクエストをリッスンする必要があります。リクエストを受信すると、応答を返し、追加のリクエストをリッスンし続けます。一度に 1 つしかリクエストがない (そして非常に短い) ため、並列処理を行う必要はありません。

次のコードを使用しましたが、最初の応答の後、サービスが応答を停止します。どこかでループが必要になるかもしれませんが、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);
    } 
4

1 に答える 1

6

あなたはもうすぐそこにいます!1 つのリクエストを受け取ったら、別のリクエストのリスニングを開始する必要があります。

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); 
}  
于 2012-07-08T18:13:39.637 に答える