Если вы внесли какие-либо изменения в пакеты - снова запустите sln. Это сработало для меня!
В дополнение к httpRuntime / maxRequestLength, упомянутому в вопросе, похоже, есть дополнительный элемент, который можно добавить в файл web.config веб-службы, чтобы разрешить передачу больших файлов.
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2000000000" />
</requestFiltering>
</security>
</system.webServer>
Похоже, это позволяет загружать файлы большего размера через веб-службы.
maxRequestLength указывается в килобайтах, а не в байтах. Это должно дать вам ограничение в 30 МБ в течение 4-минутного периода ожидания.
<httpRuntime executionTimeout="240" maxRequestLength="30000" />
Наличие слишком больших чисел может фактически помешать применению ваших значений. Я думаю Я столкнулся с этим несколько лет назад, когда я подумал, что это ограничение байтов (смутная память).
Просто для того, чтобы добавить информацию людям, прибегающим к помощи этой web.config:
C: \ Program Files \ Common Files \ Microsoft Shared \ Расширения веб-сервера \ 12 \ ISAPI
<location path="Copy.asmx"> <!-- Name of you asmx -->
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600"/> <!-- 100 megs -->
</requestFiltering>
</security>
</system.webServer>
</location>
This решил проблему после устранения этой проблемы за довольно сомнительное время.
это сработало для меня:
<binding name="uploadFilesBasicHttpBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" receiveTimeout="00:10:10" sendTimeout="00:10:00" openTimeout="00:10:00" closeTimeout="00:10:00">
<readerQuotas maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"/>
</security>
</binding>
Следует иметь в виду, что веб-службы не предназначены в первую очередь как механизмы передачи файлов. Любой специально разработанный протокол передачи файлов, вероятно, будет работать лучше, чем веб-сервис. Например, такие протоколы с большей вероятностью будут иметь дело с исправлением ошибок, частичной загрузкой и т. Д.
Однако, если вы собираетесь использовать для этой цели веб-службы в .NET, вам следует использовать WCF, если это вообще возможно. Среди других преимуществ WCF обрабатывает потоковую передачу и, следовательно, будет намного эффективнее с точки зрения использования памяти. Я обеспокоен тем, что если вы последуете двум (точным) предложениям, приведенным выше, вашим следующим результатом будет исключение «нехватка памяти или ресурсов», поскольку старая технология ASMX пытается загрузить в память весь файл размером 25 МБ сразу. Фактически, он может иметь в памяти несколько копий одновременно!
Если вы настроили использовать Веб-службы для перемещения файлов Я бы хотя бы подумал об использовании вложений WS-Attachment / DIME. Основная проблема с отправкой byte [] через веб-службы заключается в том, что они помещаются в тело SOAP, которое кодируется как строка base 64. При кодировании файлов, подобных этому , размер файла увеличивается на две трети в мыльном теле (то есть файл размером 6 МБ становится файлом размером 9 МБ по сети).
Это ' Вполне вероятно, что ваши загруженные 25 Мбайт превращаются в ОГРОМНЫЕ мыльные конверты.
Я настоятельно рекомендую прочитать это. Это может привести вас к DIME.
Вот отрывок.
Microsoft WSE Toolkit позволяет вложения будут отправлены вместе с Метод веб-службы с использованием DIME и Стандарты WS-Attachments. Хорошо изучить эти стандарты и почему они более эффективны, чем отправка больших количество двоичных данных в сети вызов службы через другие общие означает.
Надеюсь, что это поможет!
Это конкретно не отвечает на ваш вопрос, но в прошлом я использовал WCF для передачи имен / путей / списков файлов, а затем использовал FTP-библиотеку для передачи файла через FTP.
Если бы я застрял в использовании веб-служб и нуждался в поддержке очень больших файлов, я бы посмотрел на реализацию системы, которая позволяет загружать файлы по частям.
Например.
Это позволит вам разбить большие загрузки и не хранить слишком много данных в памяти. Недостатком является то, что вы по-прежнему используете довольно неэффективный транспортный механизм.