0

ポート 8080 での GET 要求に「OK」と応答する単純な C# Windows サービスがあります。

サービスに対して行われたすべてのリクエストは、TIME_WAIT のままです。私は何か不足していますか?私は周りを見回しましたが、HTTPListeners と Windows サービスで見たほとんどのサンプルは同様の方法でそれを行っていますか?!

    private HttpListener _listener;

    protected override void OnStart(string[] args)
    {
        _listener = new HttpListener();
        _listener.Prefixes.Add("http://*:8080/");
        _listener.Start();
        _listener.BeginGetContext(new AsyncCallback(OnRequestReceive), _listener);
    }

    protected override void OnStop()
    {
        _listener.Stop();
    }

    private void OnRequestReceive(IAsyncResult result)
    {
        if (!_listener.IsListening)
            return;

        //Get context for a request.
        HttpListenerContext context = _listener.EndGetContext(result);
        HttpListenerRequest request = context.Request;

        //Obtain a response object.
        HttpListenerResponse response = context.Response;
        response.ContentType = "application/json";
        response.KeepAlive = false;

        //Our return message...
        string responseString = "OK";

        //Construct the response. 
        byte[] buffer = Encoding.UTF8.GetBytes(responseString);

        Stream output = response.OutputStream;
        response.ContentLength64 = buffer.Length;
        output.Write(buffer, 0, buffer.Length);

        //Close and send response
        try
        {
            output.Flush();
            output.Close();
            response.Close();
        }
        finally
        {   
            //Wait for another request
            _listener.BeginGetContext(new AsyncCallback(OnRequestReceive), _listener);
        }
    }      

編集: _listener の Local 宣言を修正しました。

4

1 に答える 1

0

正しい方向を指摘してくれた rene に感謝します...

TIME-WAIT (サーバーまたはクライアントのいずれか) は、リモート TCP が接続終了要求の確認応答を受信したことを確認するのに十分な時間が経過するのを待機することを表します。[RFC 793 によると、MSL (セグメントの最大有効期間) として知られる最大 4 分間、接続は TIME-WAIT 状態に留まることができます。]

この動作を変更したいその他の方へ: TIME_WAIT 期間は、TIME_WAIT 期間を秒単位で表す次の DWORD レジストリ設定を変更することで構成できます。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\TcpTimedWaitDelay

于 2014-03-04T15:13:11.417 に答える