2016-10-11 3 views
0

ブロブストレージにファイルをアップロードしました。私は、作業ファイルのロールからそれらのファイルをダウンロードしようとしています。コンテナ名は、WebApi2からキューに送信されます。Azure Workerロールとブロブストレージc# - Microsoft.WindowsAzure.Storage.StorageException:リモートサーバーからエラーが返されました:(400)Bad Request

ワーカーロールは、最初にキューからコンテナ名を取り出し、そのコンテナ内のブロブをダウンロードしようとします。

public override void Run() 
    { 
     Trace.WriteLine("Starting processing of messages"); 

     // Initiates the message pump and callback is invoked for each message that is received, calling close on the client will stop the pump. 
     Client.OnMessage((receivedMessage) => 
     { 
      try 
      { 
       // Process the message 
       Trace.WriteLine("Processing Service Bus message: " + receivedMessage.SequenceNumber.ToString()); 
       string msg = "Container Name: " + receivedMessage.GetBody<String>(); 
       Trace.WriteLine("Processing Service Bus message: " + msg); 

       CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("MyStorage")); 


       CloudBlobContainer imagesContainer = null; 


       CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 

       imagesContainer = blobClient.GetContainerReference(msg); 


       // Create the container if it doesn't already exist. 
       imagesContainer.CreateIfNotExists(); 


       imagesContainer.SetPermissions(new BlobContainerPermissions 
       { 
        PublicAccess = BlobContainerPublicAccessType.Blob 
       }); 

       var blobs = imagesContainer.ListBlobs(); 
       var listOfFileNames = new List<string>(); 


       foreach (var blob in blobs) 
       { 
        var blobFileName = blob.Uri.Segments.Last(); 
        listOfFileNames.Add(blobFileName); 
        Trace.WriteLine(listOfFileNames); 
       } 

       if (listOfFileNames == null) 
       { 

        Trace.WriteLine("present"); 
       } 



       for (i = 1; i < 3; i++) 
       { 
        CloudBlockBlob signBlob = imagesContainer.GetBlockBlobReference(i + ".txt"); 

        MemoryStream lms = new MemoryStream(); 
        signBlob.DownloadToStream(lms); 
        lms.Seek(0, SeekOrigin.Begin); 

        StreamReader SR = new StreamReader(lms); 
        Trace.WriteLine(SR); 
       } 


      } 




      catch(Microsoft.WindowsAzure.Storage.StorageException e) 
      { 
       // Handle any message processing specific exceptions here 
       Trace.WriteLine("Error:" + e); 
      } 
     }); 

     CompletedEvent.WaitOne(); 
    } 

私は以下の例外取得しています:リモートサーバーがエラーを返しました:

enter code hereException thrown: 'Microsoft.WindowsAzure.Storage.StorageException' in Microsoft.WindowsAzure.Storage.dll 

エラー:Microsoft.WindowsAzure.Storage.StorageExceptionを以下

は、名前のコードです: (400不正な要求。 ---> System.Net.WebException:リモートサーバーがエラーを返しました:(400)Bad Request。 c:\ Program Files(x86)内のMicrosoft.WindowsAzure.Storage.Core.Executor.ExecutorSync [T](RESTCommand 1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 677 --- End of inner exception stack trace --- at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand 1 cmd、IRetryPolicyポリシー、OperationContext operationContext)のSystem.Net.HttpWebRequest.GetResponse( )の で、 \ Jenkins \ workspace \ release_dotnet_master \ Lib \ ClassLibraryCommon \ Core \ Executor \ Executor.cs:行604 、Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.CreateIfNotExists(BlobContainerPublicAccessTypeアクセスタイプ、BlobRequestOptions requestOptions、OperationContext operationContext)のc:\ Program Filesジェンキンス\ワークスペース\(x86の)\ release_dotnet_master \ Libの\ ClassLibraryCommon \ブロブの\ CloudBlobContainer.cs:WorkerRoleWithSBQueue1.WorkerRole.b__4_0(BrokeredMessage receivedMessage)

でライン199 すべてのヘルプは次のようになります 高く評価。あなたのコードを見てみると

+0

作成しようとしているコンテナの名前は何ですか?コンテナ作成時の400エラーは、通常、コンテナの無効な名前を示します。 –

+0

public http urlを通じてコン​​テナから任意のBLOBにアクセスできますか? –

答えて

1

は、次のことをやっている:

string msg = "Container Name: " + receivedMessage.GetBody<String>(); 

そして、あなたは次のことをやっている:

 imagesContainer = blobClient.GetContainerReference(msg); 
     // Create the container if it doesn't already exist. 
     imagesContainer.CreateIfNotExists(); 

だから、基本的にあなたがのコンテナ名を作成していますコンテナ名の無効な値であるContainer Nameで始まります。これがエラーを起こす理由です。

ブロブコンテナの有効な命名規則については、https://msdn.microsoft.com/en-us/library/azure/dd135715.aspxを参照してください。

+0

Yeaa SIr。コンテナ名は "Container Name:" + msg "というコンテナ名を取っていましたが、コンテナ名は文字列 'msg'の値だけでした。 –

+0

Thanxx alotサー –

+0

あなたが歓迎です。アカウントキーに関する私のコメント(アカウントキーを含むあなたのコメントにフラグが立てられ、それが削除されました)。まだ行っていない場合は、アカウントキーをできるだけ早く変更してください。 –

関連する問題