Частный сервер NuGet: запрашивать сущность слишком большой - программирование

Частный сервер NuGet: запрашивать сущность слишком большой

У нас есть внутренний сервер NuGet (приложение ASP.net с использованием пакета NuGet.Server), и мы хотим использовать его с Octopus для развертывания пакетов. Итак, первое, что вы нажмете, это то, что пакеты слишком большие.

Когда вы нажимаете пакет размером больше 7 Meg, вы получаете:   Не удалось обработать запрос. "Запросить сущность слишком большой".   Удаленный сервер возвратил ошибку: (413) Request Entity Too Large..

Основываясь на документации на Octopus, я обновил файл web.config, чтобы иметь изменения.

<configuration>
    <configSections>
        <sectionGroup name="elmah">
            <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
            <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
            <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/>
            <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
        </sectionGroup>
    </configSections>
    <system.web>
        <compilation debug="true" targetFramework="4.0"/>
        <httpModules>
            <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah"/>
            <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah"/>
        </httpModules>
        <httpRuntime maxRequestLength="419430400" executionTimeout="3600"/>
    </system.web>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules runAllManagedModulesForAllRequests="true">
            <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler"/>
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler"/>
            <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler"/>
        </modules>
        <staticContent>
            <mimeMap fileExtension=".nupkg" mimeType="application/zip"/>
        </staticContent>
        <security>
            <requestFiltering>
                <requestLimits maxAllowedContentLength="419430400"/>
            </requestFiltering>
        </security>
    </system.webServer>
    <elmah>
        <security allowRemoteAccess="false"/>
        <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data"/>
    </elmah>
    <location path="elmah.axd" inheritInChildApplications="false">
        <system.web>
            <httpHandlers>
                <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
            </httpHandlers>
        </system.web>
        <system.webServer>
            <handlers>
                <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode"/>
            </handlers>
        </system.webServer>
    </location>
    <appSettings>
        <add key="apiKey" value="KeyHere"/>
        <add key="packagesPath" value=""/>
    </appSettings>
    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    </system.serviceModel>
</configuration>

Это не работает. Другие сообщения говорят о запуске чего-то вроде (IIS7):   appcmd.exe set config -section: system.webServer/serverRuntime/uploadReadAheadSize: "419430400" /commit: apphost

или (IIS6):   cscript adsutil.vbs set w3svc/1/uploadreadaheadsize 419430400

Я пробовал обойтись безрезультатно. Ни одна из команд не возвращала ошибку, поэтому я предполагаю, что значение "419430400" верно для всех вызовов (байт по сравнению с некоторой другой единицей размера).

Кто-нибудь знает, что мне не хватает?

Я закончил просто копирование пакета на общий ресурс на веб-сервере, но мне бы очень хотелось, чтобы команда push работала.

Спасибо.

4b9b3361

Ответ 1

Не совсем отвечающий на вопрос OP, но связанный с этим темой, я получал ошибку (413) Request Entity Too Large при использовании NuGet push, чтобы нажать на локальный сервер SymbolSource - оказалось, что я отправлял несколько неверный URL-адрес, как только я скорректировав команду, чтобы указать на базовый /NuGet/ URL, он прошел нормально.

Не знаю, почему неправильный URL-адрес приводит к ошибке 413, но там вы идете. Надеюсь, это поможет кому-то.

РЕДАКТИРОВАТЬ: на основе приведенных ниже комментариев вам может быть больше удачи, просто ссылаясь на базовый URL http://www.myserver.com/, а не на включение /NuGet. Стоит немного поиграть.

Ответ 2

Я знаю, что это старый вопрос, но сегодня я столкнулся с той же ошибкой. Стоит заметить, что я использую создание и публикацию пакетов TeamCity. Во всяком случае, когда я пытаюсь Publish мой огромный пакет (около 200 МБ), я был заблокирован этим. Решение было простым:

Вместо публикации в http://mynugetserver/api/v2/, используйте: http://mynugetserver/

Ответ 3

Основываясь на ответах @Keith и @Nubigetter, я сделал несколько дальнейших исследований, потому что поведение казалось действительно странно для меня.

Ответ на самом деле находится в документации для Nuget.Server(если вы смотрите очень осторожно), это просто не очень очевидно:

Я поднял это с командой Nuget здесь https://github.com/NuGet/NuGetGallery/issues/2903, потому что я рассматриваю это поведение как "предоставление возможности для улучшения".

Ответ 4

Вам нужно будет установить этих парней на более высокие значения:

  • system.web - httpRuntime - maxRequestLength, скажем, 1048576
  • system.webserver - security - requestFiltering - requestLimits - maxAllowedContentLength до, скажем, 1073741824

Оба значения находятся в другом блоке, поэтому второй должен быть больше первого.

Кроме того, посмотрите на www.myget.org, который я нашел замечательным при работе с Octopus Deploy.

Ответ 5

Проверьте конфигурацию serverRuntime.

Атрибуты maxRequestEntityAllowed и uploadReadAheadSize соответственно настраивают ограничения на максимальное количество байтов, разрешенных в теле сущности запроса, и количество байтов, которые веб-сервер будет считывать в буфер, и перейти к расширению ISAPI.

Подробнее: http://www.iis.net/configreference/system.webserver/serverruntime

Я предполагаю, что вы используете SSL, и установка uploadReadAheadSize решит проблему. Поскольку во время процесса пересмотра клиента тело субъекта запроса должно быть предварительно загружено с использованием предварительной загрузки SSL. Предварительная загрузка SSL будет использовать значение свойства uploadReadAheadSize, которое используется для расширений ISAPI.

Ниже приведены значения по умолчанию

<location path="Default Web Site"> 
   <system.webServer> 
      <serverRuntime enabled="true" 
         uploadReadAheadSize="49152" 
         maxRequestEntityAllowed="4294967295" /> 
   </system.webServer> 
</location>