はじめに
プリザンターのサーバスクリプトで同一条件でhttpClient
を実行すると2回目以降の実行でエラーが発生します。このエラーを回避する方法を紹介します。
バージョン 1.4.17.1までを対象にしています
どうやるの
httpClient.ResponseHeaders.Clear();
//RequestUri、RequestHeadersやMediaTypeのセット
httpClient.Post();//他のGet/Put/Delete/Patchなども同様
リクエストを組み立てる前に、ResponseHeaders
をクリアするだけです。
どうしてこんなことに
サーバスクリプトは同一の実行タイミングのものは文字列結合されてひとまとまりにされて実行されます。httpClient
のインスタンスはこの間使い回されます。
httpClient
の実装としてはResponseHeaders
にアクセス先から取得したヘッダ情報を追加していくのですが、このときに前回の実行結果を消さずに追記していってしまいます。格納される先はDictionary
のためキーの重複は許されませんがDate
などのお決まりのキーは毎回存在するため、重複を起こし例外を吐き出します。
ソースコードの該当部分はこちらです。foreach
でDictionary
に追加しているだけで、初期化がおこなわれていません。
まとめ
今回はサーバスクリプトのhttpClient
に関するTipsを紹介しました。
毎回初期化操作をおこなうのは面倒&レスポンスを格納するだけなので機械的に初期化してしまっても問題ないかなということで、コントリビュートで該当部分は修正予定です。