由于流大小,HttpHandler崩溃

本文关键字:HttpHandler 崩溃 于流大 | 更新日期: 2023-09-27 17:58:43

我已经编写了一个HttpHandler来接收(上传)一些文件。它正在IIS 8上运行。我的代码可以工作,但只适用于非常小的文件(<1-2MB)。对于较大的文件,代码只是崩溃——甚至没有抛出异常——它只是停止并向客户端发回"500内部服务器错误"消息。

我的代码如下:

        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>

我在这一点上迷失了方向,因为我不明白为什么我的最后一行应该是个问题?是别的东西吗?

由于流大小,HttpHandler崩溃

无论你做什么…最终都会有一个文件太大,无法一次性上传。。。

所以您需要重新考虑您的方法,最好的解决方案是以块/部分的形式上传文件。看看这个样品

这需要在客户端/服务器端上进行处理

感谢您对文件进行分块的提示。我迟早会投资于此——就我目前的情况而言。

我最终得到了这个代码,至少它对我目前的需求有所帮助:

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

我不知道为什么这确实有效,而我以前的方法没有,但嘿。。。到目前为止有效。。。