ブロブのコンテナを作成しようとするたびに例外が発生します
次のコードを使用する
CloudStorageAccount storageAccInfo;
CloudBlobClient blobStorageType;
CloudBlobContainer ContBlob;
blobStorageType = storageAccInfo.CreateCloudBlobClient();
//then I initialize storageAccInfo
ContBlob = blobStorageType.GetContainerReference(containerName);
//everything fine till here ; next line creates an exception
ContBlob.CreateIfNotExist();
Microsoft.WindowsAzure.StorageClient.StorageClientException was unhandled
Message="One of the request inputs is out of range."
Source="Microsoft.WindowsAzure.StorageClient"
StackTrace:
at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait()
at Microsoft.WindowsAzure.StorageClient.TaskImplHelper.ExecuteImplWithRetry[T](Func`2 impl, RetryPolicy policy)
at Microsoft.WindowsAzure.StorageClient.CloudBlobContainer.CreateIfNotExist(BlobRequestOptions options)
at Microsoft.WindowsAzure.StorageClient.CloudBlobContainer.CreateIfNotExist()
at WebRole1.BlobFun..ctor() in C:\Users\cloud\Documents\Visual Studio 2008\Projects\CloudBlob\WebRole1\BlobFun.cs:line 58
at WebRole1.BlobFun.calling1() in C:\Users\cloud\Documents\Visual Studio 2008\Projects\CloudBlob\WebRole1\BlobFun.cs:line 29
at AzureBlobTester.Program.Main(String[] args) in C:\Users\cloud\Documents\Visual Studio 2008\Projects\CloudBlob\AzureBlobTester\Program.cs:line 19
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException: System.Net.WebException
Message="The remote server returned an error: (400) Bad Request."
Source="System"
StackTrace:
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at Microsoft.WindowsAzure.StorageClient.EventHelper.ProcessWebResponse(WebRequest req, IAsyncResult asyncResult, EventHandler`1 handler, Object sender)
InnerException:
私が間違っているのは何ですか?
私の推測では、使用しているコンテナ名は命名規則に違反しています。チェック http://msdn.Microsoft.com/en-us/library/dd135715.aspx 。
同じ例外があります。解決策:コンテナ名を小文字に変更します。
例外を除いて:
CloudBlobContainer container = blobClient.GetContainerReference("Script");
container.CreateIfNotExist();
正常に動作します:
CloudBlobContainer container = blobClient.GetContainerReference("script");
container.CreateIfNotExist();
私の場合、エミュレーターは古くなっていました。エミュレータを停止して最新のSDKをインストールすると、問題は解決しました。
最新のSDKはここから入手できます: https://Azure.Microsoft.com/en-us/downloads/
これは多くの場合、大文字が含まれているコンテナー名、またはサービスアカウント名(構成ファイルのAccountName =)に大文字が含まれていることが原因で発生します。これはSO lame。誰かがMicrosoftにこれらが101のアンチパターンであると言うことができます。Azureコンソール環境では、たとえば「LameDuck」などのアカウント名を入力できますが、接続する必要があります。 AccountName = lameduck、または理解できないエラーメッセージで顔が爆破します。AzureコンソールでLameDuckと入力しても、この名前を正確に使用すると、顔が爆破することを警告することすらありません。これは少なくとも一貫したアンチパターンを期待しているので、時間の無駄です-期待しすぎますか?大文字での接続を許可しない場合は、Azureコンソールで大文字の名前でアカウントを作成することを許可しないでください!しかし、最近は大文字を処理できるはずです。Jeees!
私もこの問題を解決するために何時間も費やしてきました-リチャードは彼の暴言を受ける資格があると思います!
大文字を持たないコンテナの名前などについては多くの投稿がありますが、blobの参照名も準拠している必要があることがわかりました。実際、私には3つの違反がありました。
エラーメッセージが無意味である場合、これらの複合エラーを追跡することは非常に困難です。問題は、原因が異なっていても、まったく同じコード行でエラーがスローされることです。
まったく同じエラーが発生しました。これは、接続文字列のアカウント名が大文字の文字で書かれているためです。
VisualStudioのサーバーエクスプローラーを介して接続することさえできませんでした。
名前を小文字に変更した後、完全に機能しました。
私の場合、ストレージエミュレーターを更新する必要があることがわかり、StorageException
例外をキャッチし、RequestInformation
プロパティをチェックすることに気付きました。このプロパティにはHttpStatusMessage
。そのメッセージは言った:
このリクエストのRESTバージョンは、このリリースのストレージエミュレータではサポートされていません。ストレージエミュレータを最新バージョンにアップグレードしてください。詳細については、次のURLを参照してください。 http ://go.Microsoft.com/fwlink/?LinkId = 392237
BLOB参照には小文字のみを含めることができます-おそらくこれに遭遇していますか?私はそうだった。
コードスニペットに基づくと、storageAccInfoを初期化する前にCreateBlobClient()を呼び出しているようです。これはあなたに問題を引き起こすと思います。
私の問題は、エミュレーターが実際に起動しておらず、それを認識していなかったことです。 http://mhuensch.azurewebsites.net/Azure-storage-wont-start/
エミュレータがポート10000を使用していて、そのポートと競合していたため、起動していませんでした。