2016-07-27 85 views
0

我已經寫了一個HttpHandler來接收(上傳)一些文件。 它在IIS 8上運行。 我的代碼有效,但只適用於非常小的文件(< 1-2 MB)。 對於較大的文件,代碼只是崩潰 - 甚至不會拋出異常 - 它只是停止並向客戶端發回「500內部服務器錯誤」消息。由於流的大小而導致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(); 

我不知道到底爲什麼這個工程,而我以前的做法沒有但嘿...它的工作原理,以便遠...