2016-07-15 8 views
0

Ich habe versucht, eine Datei aus einem leeren Blob-Container herunterladen, und ich habe 404 wie erwartet. Die Frage ist, ich sehe nur 1 Anruf für diese Datei in Fiddler, anstatt 3 (wie ich in der RetryPolicy angegeben), auch ich bemerke, dass der Anruf innerhalb von 1 Sekunde beendet, so dass es definitiv nicht 10 Sekunden warten, bevor Sie es erneut versuchen. .. Woher weiß ich, ob der BlobClient wirklich den Versuch unternommen hat?Kann ich Azure Blob RetryPolicy vertrauen? Warum kann ich diese Wiederholungsanforderungen in Fiddler nicht finden

var blobClient = this.storageAccount.CreateCloudBlobClient(); blobClient.DefaultRequestOptions.RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(10), 3); var anchorString = await cloudBlobContainer.GetBlockBlobReference(ARGO_ANCHOR_VERSION_FILE).DownloadTextAsync();

Antwort

0

Die Frage ist, ich nur 1 Aufruf für diese Datei in Fiedler zu sehen, statt 3 (wie ich in der RetryPolicy angegeben)

Dieses Verhalten als Standard erwartet wird, Wiederholungsrichtlinien (Linear, Exponential usw.) wiederholen nicht alle Operationen. Retry-Richtlinien dienen zum Behandeln von Fehlern. Sie haben erwähnt, dass Sie den Fehler 404 (Not Found) erhalten haben und dass dies kein wiederholbarer Vorgang ist, da es sich nicht um einen vorübergehenden Fehler handelt. In der Regel sind Fehler mit dem Statuscode 500+ standardmäßig erneut möglich.

Sie können jedoch eine benutzerdefinierte Wiederholungsrichtlinie erstellen und jeden Fehlercode erneut versuchen. Ich habe lange Zeit einen Blog-Post auf Wiederholungs-Polcies geschrieben und dort einen Code zum Erstellen einer benutzerdefinierten Wiederholungsrichtlinie geschrieben. Sie können eine benutzerdefinierte Wiederholungsrichtlinie erstellen, die den 404-Fehler als vorübergehenden Fehler behandelt, und dann sollten Sie feststellen, dass die Speicher-Client-Bibliothek den Vorgang erneut versucht. Sie können diesen Beitrag hier lesen: http://gauravmantri.com/2012/12/30/storage-client-library-2-0-implementing-retry-policies/.

+1

Danke für die Erklärung! Es ist verwirrend, da ich die StorageException.IsRetryable = true für diese Ausnahme gesehen habe, obwohl – Carol

+0

Den Code hier ansehen: https://github.com/Azure/azure-storage-net/blob/master/Lib/Common/ StorageException.cs. Auf dieser Basis wird 'IsRetryable' nur im Falle einer' ArgumentException' auf false gesetzt (z. B. geben Sie einen ungültigen Blobcontainernamen an). HTH. –