まぼろしハッキング

吹けば飛ぶようなネタを徒然と…

Azure Table Storageバッチ保存時に「Element 0 in the batch returned an unexpected response code.」という例外が発生する

現象

Azure Table StorageでExecuteBatchAsyncメソッドを使用してバッチ保存時に以下の例外が発生する。

Element 0 in the batch returned an unexpected response code.

原因

上記エラーが発生する原因は様々あるようですが、私の場合はEntityのDateTime型プロパティに範囲外の値が入っていました。

ちなみに、DateTime型プロパティにDateTime.MinValue(0001/01/01 00:00:00)を格納してしまっていました。

下記マイクロソフトのサイトにあるように、Table StorageのDateTime型プロパティの最小値は「1601年1月1日 UTC 00:00」となっています。

世界協定時刻 (UTC) を表す 64 ビット値。 サポートされる DateTime 範囲は、世界協定時刻の西暦 1601 年 1 月 1 日深夜 12:00 に始まり、 この範囲は 9999 年 12 月 31 日に終了します。

learn.microsoft.com

 

ExceptionのRequestInformation内のHttpStatusMessageにちゃんと原因が書いてありました。

解決方法

DateTime型プロパティには1600年1月1日 00:00:00~9999年12月31日 23:59:59をセットする。

もしDateTime型プロパティが原因で無い場合は、他の型のプロパティ値が適切かどうか確認すると良いかもしれません。

Friendlyで単体テスト実行時に『プラットフォームターゲットがテスト対象とテストプロセスで異なります。合わせてください。』という例外が発生する場合

Friendlyというテストライブラリを使用して、Visual Studio単体テスト実行時に下記エラーが出た場合の対処法メモ。

プラットフォームターゲットがテスト対象とテストプロセスで異なります。合わせてください。

原因

メッセージの通り、テスト対象プログラムのプラットフォームターゲットと、テストプロセス(単体テスト)のプラットフォームターゲットが違うことが原因です。 例えばテスト対象プログラムがx64で動いているのにテストプロセスがx86で動いている場合にエラーになります。

対処方法

テスト対象プログラムのプラットフォームターゲットと同じになるように、テストプロセスのプラットフォームターゲットをx86 or x64に変更します。

Visual Studioでの設定箇所:テスト > テスト設定 > 既定のプロセッサ アーキテクチャ

Visual Studioでの設定箇所

以上です。