我上傳zip文件到Azure進行webjob時遇到了問題。WebClient的UploadFile上的大小限制
一切順利的時候壓縮文件大小小於10MB,但是要上傳大文件,我得到這個異常時:
流不支持併發IO讀或寫操作
堆棧:
- 在System.Net.ConnectStream.InternalWrite(布爾異步,字節[]緩衝液,的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地址,字符串方法,字符串文件名)
這裏是我的代碼:
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,因爲我測試了它們中的幾個。
編輯 的解決方案是通過鑄造的WebClient HttpWebRequest的要強制AllowWriteStreamBuffering爲false:
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,這不是一個重複的問題,請在標記之前閱讀描述和解決方案 –