1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

プリザンターのサーバスクリプトで同一条件でhttpClientを実行すると2回目以降の実行でエラーが発生します。このエラーを回避する方法を紹介します。

バージョン 1.4.17.1までを対象にしています

どうやるの

httpClient.ResponseHeaders.Clear();
//RequestUri、RequestHeadersやMediaTypeのセット
httpClient.Post();//他のGet/Put/Delete/Patchなども同様

リクエストを組み立てる前に、ResponseHeadersをクリアするだけです。

どうしてこんなことに

サーバスクリプトは同一の実行タイミングのものは文字列結合されてひとまとまりにされて実行されます。httpClientのインスタンスはこの間使い回されます。
httpClientの実装としてはResponseHeadersにアクセス先から取得したヘッダ情報を追加していくのですが、このときに前回の実行結果を消さずに追記していってしまいます。格納される先はDictionaryのためキーの重複は許されませんがDateなどのお決まりのキーは毎回存在するため、重複を起こし例外を吐き出します。

ソースコードの該当部分はこちらです。foreachDictionaryに追加しているだけで、初期化がおこなわれていません。

まとめ

今回はサーバスクリプトのhttpClientに関するTipsを紹介しました。
毎回初期化操作をおこなうのは面倒&レスポンスを格納するだけなので機械的に初期化してしまっても問題ないかなということで、コントリビュートで該当部分は修正予定です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?