wcf - create - nuget server docker
Servidor NuGet privado: entidad de solicitud demasiado grande (6)
Basándome en las @Keith de @Keith y @Nubigetter , investigué un poco más porque el comportamiento me parecía muy extraño.
La respuesta está en realidad en la documentation de Nuget.Server (si se mira con mucho cuidado), no es muy obvio:
- use http://mynugetserver/nuget para list / restore
- utilizar http://mynugetserver/ for push
He planteado esto con el equipo de Nuget aquí https://github.com/NuGet/NuGetGallery/issues/2903 porque considero que este comportamiento es "una oportunidad de mejora".
Tenemos un servidor interno NuGet (aplicación ASP.net que usa el paquete NuGet.Server) y queremos usarlo con Octopus para implementar paquetes. Así que lo primero que golpeas es que los paquetes son demasiado grandes.
Cuando empuja un paquete más grande que alrededor de 7 Meg, obtiene: Error al procesar la solicitud. ''Solicitud de entidad demasiado grande''. El servidor remoto devolvió un error: (413) Entidad de solicitud demasiado grande.
Basándome en la documentación de Octopus, actualicé el archivo web.config para realizar los cambios.
<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>
Eso no funciona. Otras publicaciones hablan de ejecutar algo como (IIS7): appcmd.exe set config -section: system.webServer / serverRuntime / uploadReadAheadSize: "419430400" / commit: apphost
o (IIS6): cscript adsutil.vbs set w3svc / 1 / uploadreadaheadsize 419430400
Intenté ambos en vano. Ninguno de los comandos devolvió un error, por lo que supongo que el valor ''419430400'' es correcto para todas las llamadas (bytes frente a otra unidad de tamaño).
¿Alguien tiene alguna idea de lo que me estoy perdiendo?
Terminé simplemente copiando el paquete a un recurso compartido en el servidor web, pero realmente me gustaría que funcionara el comando push.
Gracias.
Compruebe la configuración de su serverRuntime
.
Los maxRequestEntityAllowed
y uploadReadAheadSize
configuran respectivamente límites para el número máximo de bytes permitidos en el cuerpo de la entidad de una solicitud y el número de bytes que un servidor web leerá en un búfer y pasará a una extensión ISAPI.
Más detalles: http://www.iis.net/configreference/system.webserver/serverruntime
Supongo que está utilizando SSL
y la configuración de uploadReadAheadSize
resolverá el problema. Debido a que durante el proceso de renegociación del cliente, el cuerpo de la entidad de solicitud debe precargarse utilizando la precarga SSL. La precarga SSL usará el valor de la propiedad uploadReadAheadSize
, que se usa para las extensiones ISAPI.
Aquí están los valores por defecto
<location path="Default Web Site">
<system.webServer>
<serverRuntime enabled="true"
uploadReadAheadSize="49152"
maxRequestEntityAllowed="4294967295" />
</system.webServer>
</location>
Lo que funcionó para mí fue en este artículo:
"Importante: este segundo error fue una pista falsa, no necesitas el / nuget al final de la URL"
No respondía exactamente a la pregunta del OP, pero en relación con el tema, estaba recibiendo el error (413) Request Entity Too Large
al usar NuGet push
para enviar a un servidor local de SymbolSource. Resultó que estaba enviando a una URL ligeramente incorrecta, una vez que corrigió el comando para que apunte a la base /NuGet/
URL, se ejecutó bien.
No tengo idea de por qué una URL incorrecta produce el error 413, pero ya está. Espero que esto ayude a alguien.
EDIT: basado en los comentarios a continuación, puede tener más suerte simplemente haciendo referencia a la URL http://www.myserver.com/
base en lugar de incluir también el / NuGet. Vale la pena jugar un poco.
Sé que esta es una vieja pregunta, pero hoy me enfrenté con el mismo error. Vale la pena notar que estoy usando la construcción y publicación de paquetes de TeamCity
. De todos modos, cuando trato de Publish
mi enorme paquete (alrededor de 200 MB) fui bloqueado con esto. La solución fue simple:
En lugar de publicar en http://mynugetserver/api/v2/
, use: http://mynugetserver/
Tendrás que establecer estos tipos en valores más altos:
- system.web - httpRuntime - maxRequestLength para, por ejemplo, 1048576
- system.webserver - security - requestFiltering - requestLimits - maxAllowedContentLength para, por ejemplo, 1073741824
Ambos valores están en una unidad diferente, por lo que el segundo debe ser más grande que el primero.
Además, eche un vistazo a www.myget.org, lo que me pareció excelente cuando se trabaja con Octopus Deploy.