2016-07-27 20 views
0

Ich habe einen HttpHandler geschrieben, um einige Dateien zu erhalten (upload). Es läuft auf IIS 8. Mein Code funktioniert, aber nur für sehr kleine Dateien (< 1-2 MB). Bei größeren Dateien stürzt der Code einfach ab - ohne eine Ausnahme auszulösen - er stoppt einfach und sendet eine "500 interne Serverfehler" -Meldung an den Client zurück.Absturz in HttpHandler wegen Stream-Größe

Mein Code sieht wie folgt aus:

 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()); 
     } 

Wenn ich meine Debugger es einfach nicht mehr in der letzten Zeile angebracht bekommen.

Meine Config sieht wie folgt aus:

<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> 

ich an dieser Stelle bin verloren, wie ich ein Problem sein, verstehe nicht, warum sollte meine letzte Zeile? Ist es etwas anderes?

Antwort

0

Was immer Sie tun ... irgendwann wird es eine Datei sein, die zu groß ist, als einmal hochgeladen zu werden ...

so müssen Sie Ihren Ansatz zu überdenken, beste Lösung, um die Datei in Blöcken laden ist/Teile. werfen Sie einen Blick auf dieses sample

diese Notwendigkeit

0

Danke für den Hinweis auf Brocken auf die Datei behandelt Client/Server-Seite werden. Ich werde früher oder später investieren - in meinem aktuellen Fall später.

landete ich mit diesem Code und zumindest dazu beigetragen, dass die für eine aktuelles Anforderung:

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

Ich weiß nicht, warum genau das funktioniert, während mein erster Ansatz nicht tat, aber hey ... es funktioniert so weit ...