2016-05-15 35 views
0

WebzobのAzureにzipファイルをアップロード中に問題が発生しました。WebClientのアップロードファイルのサイズ制限

ストリームがサポートされていない同時IO読み取りまたは操作

を書く:zipファイルのサイズが10メガバイト未満のとき、私はこの例外を取得し、より大きなファイルをアップロードしようとすると

すべてはしかし、うまくいきます

スタック: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、バイト[]ヘッダ、バイト[]フッタ、CompletionDelegate uploadCompletionDelegate、CompletionDelegate downloadCompletionDelegate、AsyncOperation asyncOp)システムで
  • 。 Net.WebClient.UploadFile(Uriアドレス、Stringメソッド、Stringファイル名)

は、ここに私のコードです:

MyWebClient私はタイムアウトを設定する必要が WebClientの実装です
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); 

private class MyWebClient : WebClient 
{ 
    protected override WebRequest GetWebRequest(Uri uri) 
    { 
     WebRequest w = base.GetWebRequest(uri); 
     w.Timeout = 20 * 60 * 1000; 
     return w; 
    } 
} 

サイズの制限ができる場所上の任意のアイデアは?クライアント側であり、.NETフレームワークに依存していないと確信しています。

EDITソリューションは、HttpWebRequestのにWebクライアントをキャストしてfalseにAllowWriteStreamBuffering強制した

  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; 
      } 
+0

WebClientをコード内の他の場所で再利用していますか? – Nasreddine

+0

@Nasreddine私はクライアントを他の場所で使用していません –

+0

@ ehsan-sajjad、これは重複した質問ではありません。 –

答えて

1

この動作は、このブログのエントリ、次の追加を示唆http://vikeed.blogspot.co.uk/2011/03/uploading-large-files-using-http-put-in.htmlに記載されています。

HttpWebRequest request = new ... 
request.AllowWriteStreamBuffering = false; 

同じ問題がここにAllowAutoRedirect = falseを使用すると、このエラーが発生することを示しC# HttpClient PUT投稿されました。

これらの2つの類似の投稿に示唆されているように設定を変更し、自分の誤りを修正するかどうかを確認できます。

+0

をマークする前に説明と解決策をお読みください。正解です.WebClientのラッパーをHttpWebRequest AllowWriteStreamBuffering = falseを設定します。 –

関連する問題