Windows Azure 開発者の皆様、こんにちは。
Eclipse で Windows Azure 用の PHP SDK を使用して、ローカル コンピューティングおよびストレージ エミュレーターでストレージ テーブルを操作しています。
私はこのコードを実行しています (基本的にはデータを更新しています):
$statistics = AzureStorageTable::connection()->retrieveEntities(self::$statisticsTableName);
foreach($statistics as $statistic) {
$block = $statistic->getRowKey();
if(isset($processedLogs[$block])) {
$processedLog = $processedLogs[$block];
$statistic->time = ($statistic->time + $processedLog[0]);
$statistic->count = ($statistic->count + $processedLog[1]);
$statistic->average = ($statistic->time / $statistic->count);
AzureStorageTable::connection()->updateEntity(self::$statisticsTableName,$statistic);
}
}
私は得る:
Microsoft_WindowsAzure_Exception
サーバーは要求を認証できませんでした。Authorization ヘッダーの値が、署名を含めて正しく形成されていることを確認してください。
ここで SDK で失敗します。
Storage/Table.php (615) Microsoft_WindowsAzure_Storage_Table-> _changeEntity
エンティティ オブジェクトは次のようになります。
Microsoft_WindowsAzure_Storage_DynamicTableEntity(5) ▼ {
"_dynamicProperties" protected => array(4) ▼ {
"timestamp" => stdClass(3) ▼ {
"Name" => "Timestamp" (9)
"Type" => "Edm.DateTime" (12)
"Value" => DateTime(3) { ... }
}
"time" => stdClass(3) ▼ {
"Name" => "time" (4)
"Type" => "Edm.Double" (10)
"Value" => 95.899748802185
}
"count" => stdClass(3) ▼ {
"Name" => "count" (5)
"Type" => "Edm.Int32" (9)
"Value" => 44
}
"average" => stdClass(3) ▼ {
"Name" => "average" (7)
"Type" => "Edm.Double" (10)
"Value" => 2.1795397455042
}
}
"_partitionKey" protected => "timers" (6)
"_rowKey" protected => "%2F" (3)
"_timestamp" protected => DateTime(3) ▼ {
"date" => "2012-04-20 22:51:50" (19)
"timezone_type" => 3
"timezone" => "UTC" (3)
}
"_etag" protected => "W/"datetime'2012-04-20T22%3A51%3A50.483Z'"" (42)
}
エンティティを削除しようとしたときにも同じエラーが発生しました。
ストレージから取得して同じオブジェクトを使用して更新するのではなく、テーブル エンティティを作成しようとしましたが、うまくいきません。
グーグルによると、時間に問題がある可能性があることはわかっていますが、システムの時間は正しいです (私は UTC+1 です)。どういうわけかストレージのタイムスタンプが実際の時刻より 2 時間遅れていますが、どうすればよいかわかりません。
私は Fiddler2 を持っていますが、http://127.0.0.1:10002 (ローカル テーブル ストレージ) との通信をキャッチするように設定する方法がわかりません。
私が間違っていることを教えてください。