1

私は Web API セルフホストを使用しており、リクエストごとに keep-alive: close ヘッダーをクライアントに送信する必要があります (毎回新しい接続が必要です)。このグローバル構成を設定するにはどうすればよいですか?

4

1 に答える 1

2

HttpMessageHandler を使用して、すべての要求/応答をグローバルに変更できます。探しているヘッダーはConnectionヘッダーです。このヘッダーは、何らかの理由で少し異なって公開されています。ヘッダーを直接設定することはできません。代わりにプロパティをConnection設定する必要があります。ConnectionClosetrue

次のようなクラスを作成します。

public class CloseConnectionHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            return base.SendAsync(request, cancellationToken).ContinueWith(t =>
                {
                    var response = t.Result;
                    response.Headers.ConnectionClose = true;
                    return response;
                });
        }
    }

それをメッセージハンドラコレクションに追加し、

     config.MessageHandlers.Add(new CloseConnectionHandler());

なぜあなたがこれをやりたいのか、私は興味があります。私が想像できる唯一の理由は、それぞれが短期間に 1 つのリクエストのみを行う何千もの同時クライアントを期待しているということです。そうですか?そうでない場合は、かなりのパフォーマンス ヒットが発生する可能性があります。Http.sys スタックは、非アクティブ状態が 2 分間続くと自動的に接続を閉じるため、接続がリークしているわけではありません。

于 2013-06-27T13:45:30.277 に答える