Ich habe Dateien im BLOB-Speicher hochgeladen. Ich versuche, diese Dateien von der Worker-Rolle herunterzuladen, um etwas daran zu verarbeiten. Der Containername wird vom WebApi2 an die Warteschlange gesendet.Azure Worker-Rolle und Blobspeicher C# - Microsoft.WindowsAzure.Storage.StorageException: Der Remoteserver hat einen Fehler zurückgegeben: (400) Ungültige Anforderung
Die Worker-Rolle ruft zuerst den Containernamen aus der Warteschlange ab und versucht dann, die Blobs innerhalb dieses Containers herunterzuladen.
Unten ist der Code für den Namen:
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();
}
Ich bin die unten Ausnahme beim Abrufen:
enter code hereException thrown: 'Microsoft.WindowsAzure.Storage.StorageException' in Microsoft.WindowsAzure.Storage.dll
Fehler: Microsoft.WindowsAzure.Storage.StorageException: Der Remoteserver hat einen Fehler zurückgegeben: (400) Schlechte Anfrage. ---> System.Net.WebException: Der Remote-Server hat einen Fehler zurückgegeben: (400) Ungültige Anforderung. bei System.Net.HttpWebRequest.GetResponse() bei Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync [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 Politik, Operationoperation) in c: \ Program Files (x86) \ Jenkins \ workspace \ release_dotnet_master \ Lib \ ClassLibraryCommon \ Core \ Executor \ Executor.cs: Zeile 604 bei Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.CreateIfNotExists (BlobContainerPublicAccessType accessType, BlobRequestOptions requestOptions, OperationContext operationContext) in C: \ Programme (x86) \ Jenkins \ Arbeitsplatz \ release_dotnet_master \ Lib \ ClassLibraryCommon \ Blob \ CloudBlobContainer.cs: Linie 199 bei WorkerRoleWithSBQueue1.WorkerRole.b__4_0 (BrokeredMessage receivedMessage)
Jede Hilfe wäre hoch geschätzt.
Wie lautet der Name des Containers, den Sie erstellen möchten? Ein 400-Fehler zum Zeitpunkt der Containererstellung weist normalerweise auf einen ungültigen Namen für den Container hin. –
Können Sie auf einen beliebigen Blob aus dem Container über die öffentliche HTTP-URL zugreifen? –