1

ASP.NET MVC4 を使用して、WebAPI プロジェクトで DelegatingHandler を作成しました。Handler を使用して HttpRequestMessage Properties コレクションにデータを挿入し、Http パイプラインの後半部分 (他のハンドラーやコントローラーなど) がそのデータにアクセスできるようにします。

例:

var httpRequest = (HttpRequestMessageProperty) request.Properties["httpRequest"];
httpRequest.Headers["MY_DATA"] = "some data";

これが WebAPI 要求処理のスループットに与える影響をテストしたかったので、アクション デリゲート内で HttpClient をインスタンス化し、要求を送信し、応答を待ってから次の応答を送信するコンソール アプリを作成しました。ここで説明されているパフォーマンス測定戦略を使用して、5 秒のウィンドウ内でこのアクション デリゲートの実行が成功した回数をカウントします: http://www.codeproject.com/Articles/61964/Performance-Tests-Precise-Run-Time-Measurements-ウィ

私が観察したことは、Properties コレクションから httpRequest を取得する 1 行を実行すると、パフォーマンスが大幅に低下することです。このコード行がないと、5 秒以内に 700 件以上の完了が表示されます。その行を追加すると、5 秒以内に <20 の完了に落ちます。

他の誰かがこれを経験しましたか?HTTP パイプライン全体で使用できる単一の要求の長さのデータをキャッシュするために使用する別の方法はありますか?

4

1 に答える 1

0

Current HttpContext Items コレクションにアイテムを追加しても機能しているように見え、測定しているパフォーマンスに目に見える影響はありません。

HttpContext.Current.Items.Add(REQUEST_ID_KEY, request.GetCorrelationId().ToString());
于 2012-10-01T15:11:14.000 に答える