Я хочу использовать WCF
для передачи файлов между клиентами и сервером. Я прочитал много статей, что некоторые люди используют режим Stream
для этой цели. но из-за его ограничений я решил создать сервис с буферным режимом. Например, рассмотрим это:
[OperationContract]
void UploadFile(Guid systemKey, string fileName, byte[] fileContent, string userName);
веб-конфигурация сервера:
...
<system.web>
<compilation debug="true" targetFramework="4.6" />
<httpRuntime targetFramework="4.6" maxRequestLength="2147483647" executionTimeout="7200"/>
</system.web>
....
<bindings>
<basicHttpBinding>
<binding name="myBasicBinding" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"
closeTimeout="01:50:00"
openTimeout="01:50:00"
sendTimeout="01:50:00"
receiveTimeout="01:50:00"
messageEncoding="Mtom">
<readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
....
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="4294967295"/>
</requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
и клиентская конфигурация:
<system.web>
<compilation debug="true" targetFramework="4.6"/>
<httpRuntime targetFramework="4.6" maxRequestLength="2147483647" executionTimeout="7200"/>
</system.web>
...
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="4294967295"/>
</requestFiltering>
</security>
</system.webServer>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicEndpoint"
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"
closeTimeout="01:50:00"
openTimeout="01:50:00"
sendTimeout="01:50:00"
receiveTimeout="01:50:00"
messageEncoding="Mtom">
<readerQuotas maxDepth="128" maxStringContentLength="8388608" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost/fts.svc" binding="basicHttpBinding" bindingConfiguration="basicEndpoint" contract="ServiceReference1.Ifts" name="basicEndpoint"/>
</client>
</system.serviceModel>
Я могу загрузить 400MB
файл, но когда размер файла 500MB
или выше, я получил эту ошибку:
System.InsufficientMemoryException
HResult = 0x8013153D
Сообщение = не удалось выделить буфер управляемой памяти размером 1073741824 байта. Объем доступной памяти может быть низким.
Источник = mscorlib
Внутреннее исключение 1:
OutOfMemoryException: было сгенерировано исключение типа System.OutOfMemoryException.
\
Я думаю, я установил значения для 2GB
данных, но он не работает на 500MB
.
Спасибо
этот код запускается локально, и у меня 16GB
RAM. В чем проблема и какое значение я должен изменить, чтобы загружать файлы harge?
Спасибо