2016-07-26 18 views
0

Ich speichere große Dateien in einem Blog-Speichercontainer.Azure BlobStorage-Stream ist bei Dateien> 25 MB geschlossen

Später, mit einem WebJob (auch in Azure), lese ich von jedem dieser Blobs mit CloudBlockBlob.OpenRead(), die mir eine Stream gibt.

Ich öffne den Stream und lesen Sie davon. Das Problem ist, dass, wenn die Datei größer als 25 MB ca. ist, nach einiger Zeit mit dem Lesen OK, es diese Ausnahme auslöst (während einer Lese).

Unbehandelte Ausnahme: System.Net.Http.HttpRequestException: Fehler während Inhalt in einen Stream kopieren. ---> System.ObjectDisposedException: Zugriff auf einen geschlossenen Stream nicht möglich. bei System.IO .__ Error.StreamIsClosed() bei System.IO.MemoryStream.get_Position() bei System.Net.Http.StreamToStreamCopy.StartAsync()

Es scheint, dass die Datei auf dem anderen geschlossen ist Seite!

Warum passiert das? Gibt es eine Auszeit? Wie kann ich mit dieser Situation umgehen?

Antwort

1

Abhängig von Ihrer Verbindungsgeschwindigkeit kann Ihre Antwort ein Zeitlimit sein. Dies würde Ihre Aussage unterstützen, dass es sich um Dateien von über 25MB handelt. Erhöhen Sie die ServerTimeout und/oder MaximumExecutionTime mit BlobRequestOptions zu lösen.

+0

Die Sache ist, dass ich nicht die Datei herunterladen, aber einen Stream von ihm mit cloudBlobBlock.OpenRead() öffnen. Dies ist eine Voraussetzung. – SuperJMN

+1

Haben Sie versucht, BlobRequestOptions ServerTimeout und Maximale Ausführungszeit zu setzen? https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.blobrequestoptions_members(v=azure.10).aspx –

+0

Und bitte posten Sie den Code, den Sie verwenden. –

0

Ich habe die OpenRead() Methode mit diesen Optionen aufgerufen und es scheint, dass es nicht mehr ausläuft!

return block.OpenRead(null, new BlobRequestOptions() 
      { 
       ServerTimeout = TimeSpan.MaxValue, 
       RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 4),     
       MaximumExecutionTime = TimeSpan.FromHours(3) 
      });