Я знаю, что эта топика c уже неоднократно обсуждалась, но, к сожалению, ни одно из предложенных решений не сработало для меня. Я пытаюсь перенести большие файлы (до 1,5 ГБ) из клиентского консольного приложения в службу WCF. Но я всегда получаю сообщение об ошибке HTTP Удаленный сервер возвратил неожиданный ответ: (413) запрос слишком большой. при передаче содержимого файла.
Вся информация, найденная в inte rnet где о добавлении maxContentLength и аналогичной конфигурации в файл web.config. Но я предполагаю, что я ввел их в неправильной части из файла web.config или около того.
Редактировать 26.02.2020 18:35 (обновлено из-за подсказок и новых тестов)
На основе подсказок сверху я добавил несколько записей в конфигурационные файлы и сделал еще несколько тестов. Тем временем я обнаружил несколько вещей:
- Число в web.config определяет размер в битах, а не в байтах, как я читаю на нескольких страницах
- Число должно быть допустимое значение int32 - поэтому максимальное значение составляет 2147483647
- 2147483647 бит около 256 МБайт - так что это понятно То, что мой тестовый файл размером около 400 МБ вызвал проблему
В целом, если невозможно передать большие файлы - должно быть по крайней мере 20-30 МБ . Для больших файлов я найду другое решение.
Для более простых тестов я просто создал новую пустую службу WCF и консольное приложение для ее тестирования.
Вы можете найти полный исходный код на Google Диск . Я также включил тестовое изображение 22 МБ, которое не работает для передачи.
В отличие от моей первой проблемы, Теперь я получаю ошибку 404 вместо 413. Так или иначе, IIS возвращает 404, когда запрос не соответствует сервису вместо предыдущего 413. Довольно странное для меня поведение.
web.config и app.config выглядят по-прежнему так же, как и раньше (кроме нет структуры сущностей).
Сервер web.config
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="mybinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
<security mode="None"/>
</binding>
</basicHttpBinding>
</bindings>
<protocolMapping>
<add binding="basicHttpBinding" scheme="http" bindingConfiguration="mybinding" />
</protocolMapping>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
Клиент app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="mybinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:53042/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="mybinding" contract="ServiceReference1.IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>
</configuration>
Поскольку я не профессионал в отношении web.config Конфигурация, я полагаю, я просто добавил конфигурацию в неправильный раздел XML. Кто-нибудь может мне помочь, как должен выглядеть мой web.config, чтобы я мог передавать большие файлы.
Заранее спасибо
С уважением, Маркус