2016-07-27 83 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(); 

我不知道到底为什么这个工程,而我以前的做法没有但嘿...它的工作原理,以便远...