У меня возникла проблема при загрузке zip-файла в Azure для веб-дизайна.Ограничение по размеру для UploadFile WebClient
Все идет хорошо, когда размер почтового индекса файла меньше 10 МБ, однако при попытке загрузить файлы большего размера, я получаю это исключение:
Поток не поддерживает одновременную IO операции чтения или записи
Стек:
- в System.Net.ConnectStream.InternalWrite (Boolean асинхронном, байт [] буфера, Int32 смещение, размер Int32, AsyncCallback обратного вызова, объект состояние)
- на System.Net.ConnectStream.Write (байт [] буфера, Int32 смещение, размер Int32)
- на System.Net.WebClient.UploadBitsState.WriteBytes()
- на System.Net.WebClient.UploadBits (WebRequest запрос, поток ReadStream, байт [] буфера, Int32 chunkSize, байт [] заголовок, Байт [] колонтитула, CompletionDelegate uploadCompletionDelegate, CompletionDelegate downloadCompletionDelegate, AsyncOperation asyncOp)
- в системе. Net.WebClient.UploadFile (адрес Uri, метод String, String fileName)
Вот мой код:
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);
где MyWebClient
является реализацией WebClient
, где мне нужно, чтобы установить тайм-аут:
private class MyWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri uri)
{
WebRequest w = base.GetWebRequest(uri);
w.Timeout = 20 * 60 * 1000;
return w;
}
}
Любой идею о том, где ограничение размера может быть? Я уверен, что это клиентская сторона и не зависит от .NET Framework, поскольку я тестировал несколько из них.
РЕДАКТИРОВАТЬ Решение было заставить AllowWriteStreamBuffering к ложным путем отливки WebClient к HttpWebRequest:
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;
}
Вы повторно используете WebClient в другом месте вашего кода? – Nasreddine
@Nasreddine Я не пользуюсь клиентом в другом месте –
@ ehsan-sajjad, это не дублирующий вопрос, пожалуйста, прочитайте описание и решение перед его маркировкой –