2013-01-16 3 views
9

Ich migriere von WindowsAzure.StorageClient 1.7 zu WindowsAzure.Storage 2.0, und ich arbeite gerade an der Verwaltung der Ausnahmen. Im Anschluss an diesen guide und anderen Quellen, fand ich heraus, dass ich ausWindowsAzure.Storage v2 StorageException

try 
{ 
    // Something 
} 
catch (StorageClientException e) 
{ 
    switch (e.ErrorCode) 
    { 
     case StorageErrorCode.ContainerNotFound: 
     case StorageErrorCode.ResourceNotFound: 
     case StorageErrorCode.BlobNotFound: 
     case StorageErrorCode.ConditionFailed: 
      // Do something 
    } 
} 

zu

try 
{ 
    // Something 
} 
catch (StorageException e) 
{ 
    switch (e.RequestInformation.ExtendedErrorInformation.ErrorCode) 
    { 
     case StorageErrorCodeStrings.ContainerNotFound: 
     case StorageErrorCodeStrings.ResourceNotFound: 
     case BlobErrorCodeStrings.BlobNotFound: 
     case StorageErrorCodeStrings.ConditionNotMet: 
      // Do something 
    } 
} 

Sieht einfach zu migrieren hatte. Das Problem ist ExtendedErrorInformation ist immer gleich null. Die HttpStatusMessage sagt stattdessen "Das angegebene Blob existiert nicht.", Wie es sollte.

Ich dachte, es wurde durch den Simulator der Testumgebung verursacht, aber es in einer echten Azure-Umgebung zu versuchen, trieb mich in die gleiche Situation.

Irgendeine Idee?

+0

Gemäß der Dokumentation sollten die erweiterten Fehlerinformationen nicht für Code-Logi verwendet werden c - http://msdn.microsoft.com/en-us/library/windows/desktop/aa375374%28v=vs.85%29.aspx –

+0

@RussCam dieser Link scheint über RPC zu sein, nicht die Storage-Client-API. – fsimonazzi

Antwort

3

Ich habe es gerade versucht und war überrascht zu sehen, dass in der Tat das ExtendedErrorInformation-Objekt null ist. Es ist jedoch nicht immer null. Wenn ich beispielsweise versuche, einen Blob-Container zu erstellen, der bereits mit der Methode blobContainer.Create() existiert, erhalte ich eine Nicht-Null-ExtendedErrorInformation. Wenn ich jedoch versuche, Attribute eines Blobs abzurufen, die nicht im Blob-Container vorhanden sind, erhalte ich ein Null-ExtendedErrorInformation-Objekt. Ich denke, man kann nicht einfach davon ausgehen, dass das ExtendedErrorInformation-Objekt immer verfügbar sein wird.

Auch ich habe festgestellt, dass Sie in Ihrem Code für 2.0, StorageErrorCodeStrings verwenden. Bitte beachten Sie, dass es von 2.0 entfernt ist und nur mit der Version 1.8 oder früher verfügbar ist. Dachte ich sollte erwähnen, dass

Update: Bitte beachten Sie den Kommentar unten von @VollmonD. Dies wurde in der Version 2.0.3 hinzugefügt.

+1

StorageErrorCodeStrings wurde in 2.0.3 hinzugefügt, ich habe die Pakete über nuget. Die FetchAttributes ist eine der Situationen, in denen ich das Problem habe. Jetzt versuche ich zu sehen, ob ich die Fehlercodezeichenfolgen verwenden kann, um die Fehlermeldung zu erhalten und sie mit dem HttpStatus zu vergleichen. Danke für deinen Blog-Eintrag, es hat mir während dieser Migrationstage sehr geholfen :) –

+0

Mein Schlechter! Ich wusste nicht, dass das Storage-Team dies zurück hat. Ich muss zurückgehen und den Beitrag zur Ausnahmebehandlung aktualisieren :). Ich bin froh, dass dir meine Blogposts gefallen haben. –

6

Eine andere Möglichkeit ist stattdessen die RequestInformation.HttpStatusCode anzusehen. Dies scheint sowieso zuverlässiger zu sein. Ihr Code übersetzt und nicht leicht zu:

try 
{ 
    // Something 
} 
catch (StorageException e) 
{ 
    switch (e.RequestInformation.HttpStatusCode) 
    { 
     case (int)HttpStatusCode.NotFound: 
     case (int)HttpStatusCode.PreconditionFailed: 
     // Do something 
    } 
} 
+0

Ja, ich kannte diesen Statuscode, aber er ist viel zu allgemein für meine Zwecke. Ich brauchte die "Power", die durch die Fehlercode-Strings von Azure gegeben wurde, um verschiedene Aktionen auszuführen. Es gelang mir, die Zeichenfolge aus der HttpStatusMessage zu nehmen und sie mit den Azure-Zeichen zu vergleichen, um den Code zurückzugeben. @ Gaurav in der anderen Antwort war richtig, das Problem ist nur mit den FetchAttributes, für das, was ich gesehen habe. –

0

spät zur Party, aber wenn Sie Löschen von Elementen aus dem Blob zu behandeln versuchen oder einfach nur überprüft, ob sie existieren (Extension-Methode irgendwie nähern). Sie können nun:

Hier finden Sie eine Liste der Methoden auf CloudBlob: https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.cloudblockblob.aspx