gpt4 book ai didi

c# - wcf流式传输大文件内存不足错误

转载 作者:行者123 更新时间:2023-11-30 18:34:49 24 4
gpt4 key购买 nike

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

 <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 的 ram,在客户端也有 8gb 的 ram。因为它是流式传输模式,所以它不一定使用 rams 但我现在正在考虑它是否是内存问题:(任何帮助将不胜感激。

最佳答案

上周我遇到了同样的问题。我想我找到了解决办法。我更改了 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 的文件。

关于c# - wcf流式传输大文件内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15760044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com