41

BLOB のコンテナーを作成しようとするたびに例外が発生します

次のコードを使用して


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: 

私が間違っていることを知っていますか?

4

10 に答える 10

114

私の推測では、使用しているコンテナ名が命名規則に違反していると思われます。http://msdn.microsoft.com/en-us/library/dd135715.aspxを確認してください。

于 2010-04-12T18:33:03.310 に答える
14

私は同じ例外を持っています。解決策: コンテナー名を小文字に変更します。

例外:

CloudBlobContainer container = blobClient.GetContainerReference("Script");
container.CreateIfNotExist();

正常に動作します:

CloudBlobContainer container = blobClient.GetContainerReference("script");
container.CreateIfNotExist();
于 2012-03-19T06:33:21.093 に答える
2

まったく同じエラーが発生しました。接続文字列のアカウント名が大文字で書かれていたことが原因でした。

Visual Studio の Server Explorer でも接続できませんでした。

名前を小文字に変更すると、完全に機能しました。

于 2012-01-27T12:23:09.070 に答える
2

これは、コンテナ名に大文字が含まれているか、サービス アカウント名 (構成ファイルの AccountName=) に大文字が含まれていることが原因であることがよくあります。これはとても不自由です。だれかマイクロソフトに、これらは 101 のアンチパターンだと教えてもらえますか。Azure コンソール環境では、たとえば "LameDuck" というアカウント名を入力できますが、AccountName=lameduck で接続する必要があります。そうしないと、理解できないエラー メッセージが表示されて顔が爆発します。Azure コンソールに LameDuck と入力すると、この名前を正確に使用すると顔が爆発するという警告すら表示されません。少なくとも一貫したアンチパターンを期待しているので、これは時間の無駄です。大文字での接続を許可しない場合は、Azure コンソールで大文字の名前を使用してアカウントを作成することを許可しないでください。しかし、最近では大文字を処理できるはずです。ジーズ!

于 2010-05-21T14:16:48.453 に答える
2

私もこの問題を解決するために何時間も費やしました - リチャードは彼の暴言を吐く権利があると思います!

大文字を含まないコンテナーの名前などに関する多くの投稿があります。ただし、blob 参照名も準拠する必要があることがわかりました。実際、私は 3 つの違反を犯しました。

  1. リチャードのように、構成ファイルのアカウント名に大文字が含まれていました。
  2. コンテナ名に大文字がありました。
  3. ブロブ参照名にスペースがありました。

エラー メッセージが無意味な場合、これらの複合エラーを追跡することは非常に困難です。問題は、原因が異なる場合でも、エラーがまったく同じコード行でスローされることです。

于 2012-05-19T14:31:16.783 に答える
0

コード スニペットに基づくと、storageAccInfo を初期化する前に CreateBlobClient() を呼び出しているようです。これではご迷惑をおかけすると思います。

于 2010-04-12T09:54:13.390 に答える
0

BLOB 参照には小文字のみを使用できます - おそらくこれに遭遇していませんか? 私はそうでした。

于 2017-07-22T01:16:43.030 に答える
0

私の問題は、エミュレーターが実際に起動していないことでした。私はそれを認識していませんでした。 http://mhuensch.azurewebsites.net/azure-storage-wont-start/

エミュレーターがポート 10000 を使用し、そのポートとの競合があったため、起動していませんでした。

于 2015-06-17T17:25:52.170 に答える