2016-07-27 9 views
0

いくつかのファイルを受信(アップロード)するためにHttpHandlerを作成しました。 IIS 8上で動作しています。 私のコードは動作しますが、非常に小さいファイル(< 1〜2 MB)に対してのみ動作します。 大きなファイルの場合、コードはちょうどクラッシュします。例外をスローしなくても、クライアントは "500 internal server error"メッセージを停止して返します。ストリームサイズのためにHttpHandlerでクラッシュする

私のコードは次のようになります。

 int bufferSize = 4096; 
     string parameterString; 

     using (var bs = context.Request.GetBufferlessInputStream(true)) 
     using (var ms = new MemoryStream()) 
     { 
      byte[] fileContents = new byte[bufferSize]; 
      int charsRead = bs.Read(fileContents, 0, bufferSize); 

      while (charsRead > 0) 
      { 
       ms.Write(fileContents, 0, bufferSize); 
       charsRead = bs.Read(fileContents, 0, bufferSize); 
      } 

      parameterString = Encoding.UTF8.GetString(ms.ToArray()); 
     } 

私は私のデバッガが付属得るとき、それはちょうど最後の行で停止します。

私の設定は次のようになります。私は私の最後の行は問題であるべき理由を私は理解していないとして、この時点で迷ってしまいました

<basicHttpBinding> 
    <binding name="XXXX" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="21474836470" maxBufferSize="2147483647" maxReceivedMessageSize="21474836470"> 
     <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" /> 
    </binding> 
    </basicHttpBinding> 

? それ以外のものはありますか?

答えて

0

ものは何でもあなたは...最終的には、一度にアップロードするには大きすぎるファイルがあるでしょう...

ので、あなたのアプローチを再考する必要があり、最善の解決策は、/チャンクでファイルをアップロードすることです部品。このニーズに処理するクライアント/サーバーサイドこのsample

にチャンクアップファイルをへのヒントの

0

感謝を見てみましょう。私はこれに遅かれ早かれ投資します - 私の現在のケースでは後で。

私は、このコードになってしまったし、少なくともそれが私の現在の要件のために助けた:

parameterString = new StreamReader(context.Request.GetBufferlessInputStream(true)).ReadToEnd(); 

私の前者の方法ではありませんでしたが、まさにこの作品なぜ私にはわからないけどねえ...それはそう働きます遠く...