3

我有一个用于传输文件的 wcf 服务。我正在使用 basicHttpBinding Streamed 模式。我在 web.config 和 app.config(client side) 中正确配置了一些值(我猜),但它没有按我预期的那样工作。它最多可以发送和接收 1,610,611,200 字节,接近 1.5 GB。每次我将大于此大小的文件上传到服务器时,在此限制下,我的服务方法都会抛出“读取流时引发异常”。例外。当我尝试下载大于此大小的文件时,它会抛出“抛出'System.OutOfMemoryException'类型的异常。” 例外。这是我的配置文件相关部分。希望有人能给我一些点来解决这个问题。

 <basicHttpBinding> (web config)
    <binding name="StreamServiceHttpBinding" receiveTimeout="01:00:10" sendTimeout="03:00:30" maxBufferPoolSize="2147483647"
      maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
      transferMode="Streamed">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </basicHttpBinding>

 <basicHttpBinding> (app config)
    <binding name="BasicHttpBinding_IStreamService" receiveTimeout="01:00:10"
      sendTimeout="03:00:30" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
      maxReceivedMessageSize="2147483647" transferMode="Streamed">
      <readerQuotas maxDepth="128" maxStringContentLength="2147483647"
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding> 
  </basicHttpBinding>

顺便说一句,我在服务器上有 8gb 的内存,在客户端也有 8gb 的内存。因为它是流式传输模式,它不一定使用公羊,但我现在想如果它是一个内存问题:(任何帮助将不胜感激。

4

2 回答 2

0

上周我遇到了同样的问题。我想我找到了解决方案。我更改了 maxReceivedMessageSize="4294967295"(近 4GB)并增加了超时。

应用程序配置

<bindings>
      <basicHttpBinding>
        <binding name="GShare.Sharer" receiveTimeout="00:40:00" sendTimeout="00:40:00" maxReceivedMessageSize="4294967295" maxBufferSize="2147483647" maxBufferPoolSize="4294967295" transferMode="StreamedRequest">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          <security mode="None">
          </security>
        </binding>
      </basicHttpBinding>
</bindings>

<system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="4294967295"/>
      </requestFiltering>
    </security>
  </system.webServer>

客户端 web.config

<binding name="BasicHttpBinding_ISharer" closeTimeout="24:01:00" openTimeout="24:01:00" receiveTimeout="24:10:00" sendTimeout="24:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="4294967295" maxBufferSize="2147483647" maxReceivedMessageSize="4294967295" textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true" messageEncoding="Text">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
 </binding>

之后,我成功上传了 1.89GB 的文件。

于 2014-04-09T08:02:08.907 回答
0

谢谢@JJ_CoderHir。

我遇到了同样的问题。使用下面的代码可以解决。根据我的理解,由于“requestLengthDiskThreshold”的默认值正确,我遇到了 System.OutOfMemory 问题。所以我已经改变它现在它按照我的期望工作。

<system.web>
    <httpRuntime maxRequestLength="2147483647" requestLengthDiskThreshold="2097151" executionTimeout="240"/>
</system.web>
<system.webServer>
    <security>
        <requestFiltering>
            <requestLimits maxAllowedContentLength="2147483648" />
        </requestFiltering>
    </security>
</system.webServer>
于 2019-11-25T11:12:00.657 回答