Beim Hochladen einer Zip-Datei in Azure für einen Webjob ist ein Problem aufgetreten.Größenbeschränkung für UploadFile des WebClients
Alles geht gut, wenn die ZIP-Datei Größe als 10 MB weniger ist jedoch, wenn größere Dateien zu versuchen, bekomme ich diese Ausnahme:
Der Strom nicht gleichzeitig IO unterstützt Lese- oder Schreiboperationen
Stack:
- bei System.Net.ConnectStream.InternalWrite (Boolean async, Byte [] Puffer, Int32 Offset-, Int32 Größe, AsyncCallback Rückruf, Objektzustand)
- bei System.Net.ConnectStream.Write (Byte [] Puffer, Int32 Offset, Int32 size)
- bei System.Net.WebClient.UploadBitsState.WriteBytes()
- bei System.Net.WebClient.UploadBits (WebRequest Anfrage, Stream Readstream, Byte [] Puffer, Int32 chunkSize, Byte [] Header, Byte [] footer, CompletionDelegate uploadCompletionDelegate, CompletionDelegate downloadCompletionDelegate, AsyncOperation asyncOp)
- bei System. Net.WebClient.UploadFile (Uri-Adresse, String-Methode, String fileName)
Hier ist mein Code:
var client = new MyWebClient
{
Credentials = new NetworkCredential(webSite.UserName, webSite.Password),
};
client.Headers.Add(HttpRequestHeader.ContentType, "application/zip");
client.Headers.Add("Content-Disposition", $"attachment; filename={appFile}");
var response = client.UploadFile(uploadUri, "PUT", filePath);
wo MyWebClient
ist eine Implementierung von WebClient
, wo ich das Timeout einstellen müssen:
private class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri uri)
{
WebRequest w = base.GetWebRequest(uri);
w.Timeout = 20 * 60 * 1000;
return w;
}
}
Jede Idee, wo die Größenbeschränkung sein kann? Ich bin sicher, es ist Client-Seite und nicht abhängig von. Net Framework, wie ich mit mehreren von ihnen getestet.
EDIT Die Lösung wurde durch AllowWriteStreamBuffering auf false zu zwingen WebClient zu HttpWebRequest Gießen:
protected override WebRequest GetWebRequest(Uri uri)
{
WebRequest w = base.GetWebRequest(uri);
w.Timeout = 20 * 60 * 1000;
var httpRequest = w as HttpWebRequest;
if (httpRequest != null)
{
httpRequest.AllowWriteStreamBuffering = false;
}
return w;
}
Verwenden Sie den WebClient an anderer Stelle in Ihrem Code erneut? – Nasreddine
@Nasreddine Ich benutze den Client nirgendwo sonst –
@ ehsan-sajjad, das ist keine doppelte Frage, lesen Sie bitte die Beschreibung und Lösung, bevor Sie es markieren –