私は403を取得しているようです:
HTTP /1.1403サーバーがリクエストの認証に失敗しました。Authorizationヘッダーの値が署名を含めて正しく形成されていることを確認してください。
HttpWebRequest.DefaultCachingPolicy
これは、app.configで次のように
setを使用すると発生します。
<system.net>
<requestCaching defaultPolicyLevel="Default" isPrivateCache="false">
<defaultHttpCachePolicy policyLevel="Default"/>
</requestCaching>
</system.net>
これを行っているのは、ファイルシステムであるかのように提供したblobストレージへのAPIを呼び出す、制御できないレガシーコードがあるためです(ファイルごとに最大58の同一の呼び出し)。明らかにこれは理想的ではありません。デフォルトのHTTPスタイルのキャッシュを使用することは、アプリケーションが変更されたときにのみファイルをダウンロードするようになるため、私が望む動作です。
この問題は、他のすべてのリクエストで発生しているようです(たとえば、リクエストがキャッシュされ、サーバーがサーバーのコンテンツが変更されているかどうかを確認しているときに発生しているようです)。
失敗したリクエストと成功したリクエストの唯一の違いは、次のものが含まれていることです。
If-None-Match: "<a blob etag>"
If-Modified-Since: <a date>
1.7.1のgithubで.netAPI(私が使用している)のコードを確認しましたが、SDK 1.6(現在使用しているもの)から変更されていないと仮定すると、正常に動作するはずです。
どんな助けでも大歓迎です
更新:私は支援するためにいくつかの再現コードを書きました:
用途:.NET 4.0、Windows Azure SDK 1.6
using System;
using System.Net;
using System.Net.Cache;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
namespace AzureStorageProb
{
class Program
{
static void Main(string[] args)
{
const string accountKey = "<azure storage account key>";
const string account = "<azure storage account name>";
const string testBlob = "<blob path to test file>";
var cloudStorageAccount =
new CloudStorageAccount(
new StorageCredentialsAccountAndKey(account, accountKey),
useHttps: true);
var cloudBlobClient = cloudStorageAccount.CreateCloudBlobClient();
HttpWebRequest.DefaultCachePolicy =
new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
try
{
var blob = cloudBlobClient.GetBlobReference(testBlob);
blob.FetchAttributes();
blob.DownloadByteArray();
Console.WriteLine("First attempt worked!");
}
catch (StorageClientException ex)
{
Console.WriteLine(ex);
}
try
{
var blob = cloudBlobClient.GetBlobReference(testBlob);
blob.FetchAttributes();
blob.DownloadByteArray();
Console.WriteLine("Second attempt worked!");
}
catch (StorageClientException ex)
{
Console.WriteLine(ex);
}
Console.ReadKey();
}
}
}