2012-06-29 29 views
16

Chúng tôi có một máy chủ NuGet nội bộ (ứng dụng ASP.net sử dụng gói NuGet.Server) và chúng tôi muốn sử dụng nó với Octopus để triển khai các gói. Vì vậy, điều đầu tiên bạn nhấn là các gói quá lớn.Private NuGet Server: Yêu cầu thực thể quá lớn

Khi bạn đẩy một gói lớn hơn khoảng 7 Meg bạn nhận được: Không thể xử lý yêu cầu. 'Yêu cầu thực thể quá lớn'. Máy chủ từ xa trả về lỗi: (413) Yêu cầu thực thể quá lớn ..

Dựa trên tài liệu trên Octopus, tôi đã cập nhật tệp web.config để thay đổi.

<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> 

Điều đó không có tác dụng. bài viết khác nói về việc chạy một cái gì đó tương tự (IIS7): bộ appcmd.exe cấu hình -section: system.webServer/serverRuntime/uploadReadAheadSize: "419.430.400"/cam kết: apphost

hoặc (IIS6): cscript adsutil.vbs thiết w3svc/1/uploadreadaheadsize 419430400

Tôi đã thử cả hai không có kết quả. Cả hai lệnh đều không trả về lỗi, vì vậy tôi giả định rằng giá trị '419430400' là chính xác cho tất cả các cuộc gọi (byte so với một số đơn vị kích thước khác).

Bất cứ ai có bất kỳ ý tưởng nào tôi đang thiếu?

Tôi đã kết thúc chỉ sao chép gói vào một phần trên máy chủ web, nhưng tôi thực sự muốn lệnh đẩy hoạt động.

Cảm ơn.

+0

Tôi cũng đã thực hiện các bước tương tự như @Tyrel và đã đến cùng một kết thúc, đặt thủ công gói vào thư mục. Tôi muốn máy chủ xây dựng của mình có thể đẩy các gói lên NuGet Server trên một máy khác. Tôi chưa thấy câu trả lời dứt khoát cho vấn đề này. –

Trả lời

1

Bạn sẽ phải thiết lập những kẻ đến giá trị cao hơn:

  • system.web - httpRuntime - maxRequestLength đến, nói, 1048576
  • system.webServer - an ninh - requestFiltering - requestLimits - maxAllowedContentLength để , nói 1073741824

Cả hai giá trị đều nằm trong đơn vị khác nên giá trị thứ hai phải lớn hơn giá trị thứ nhất.

Ngoài ra, hãy xem www.myget.org mà tôi thấy tuyệt vời khi làm việc với Octopus Deploy.

+0

Tyrel đã có 419430400 đặt cho maxRequestLength trên httpRuntime. Điều đó nên được waaaay quá đủ. Tôi nhận được lỗi này cùng với một gói đó là 120KB. –

1

Kiểm tra cấu hình serverRuntime của bạn.

Thuộc tính maxRequestEntityAlloweduploadReadAheadSize tương ứng định cấu hình giới hạn cho số byte tối đa được phép trong phần thân của yêu cầu và số byte mà máy chủ web sẽ đọc vào bộ đệm và chuyển đến tiện ích mở rộng ISAPI.

Thông tin chi tiết: http://www.iis.net/configreference/system.webserver/serverruntime

tôi đoán là bạn đang sử dụng SSL và thiết uploadReadAheadSize sẽ giải quyết vấn đề này. Bởi vì trong quá trình thương lượng lại khách hàng, cơ quan thực thể yêu cầu phải được tải trước bằng cách sử dụng tải trước SSL. Tải trước SSL sẽ sử dụng giá trị của thuộc tính uploadReadAheadSize, được sử dụng cho tiện ích mở rộng ISAPI.

Dưới đây là giá trị mặc định

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

Không chính xác trả lời câu hỏi của OP, nhưng liên quan đến chủ đề này, tôi đã nhận được báo lỗi (413) Request Entity Too Large khi sử dụng NuGet push để đẩy đến một máy chủ SymbolSource địa phương - Hóa ra tôi đã được gửi đến một URL hơi không chính xác, một khi tôi sửa chữa lệnh để trỏ đến các URL cơ sở /NuGet/, nó chạy tốt.

Không biết tại sao một URL không chính xác dẫn đến lỗi 413, nhưng có bạn đi. Hy vọng điều này sẽ giúp một ai đó.

EDIT: dựa trên các nhận xét bên dưới, bạn có thể có nhiều may mắn hơn chỉ tham chiếu URL cơ sở http://www.myserver.com/ thay vì bao gồm/NuGet. Giá trị chơi xung quanh một chút.

+0

Nó đã giúp tôi! Tôi cũng nhận được lỗi này với URL không chính xác. Cảm ơn! –

+8

Đối với trường hợp của tôi, tôi phải loại bỏ '/ NuGet' và chỉ có URL cơ sở:' http: // localhost: 56211' – stack247

+0

Giống như stack247, nó chỉ hoạt động khi tôi gỡ bỏ phần nuget/phần cuối, vì vậy nó nên trông như thế này: http://nuget.internalserver.com/NuGetServer/ không phải http://nuget.internalserver.com/NuGetServer/nuget –

7

Tôi biết đây là một câu hỏi cũ, nhưng hôm nay tôi đã phải đối mặt với cùng một lỗi. Cần lưu ý rằng tôi đang sử dụng xây dựng và xuất bản gói TeamCity. Dù sao, khi tôi cố gắng để Publish gói lớn của tôi (khoảng 200 MB) tôi đã bị chặn với điều này. Các giải pháp rất đơn giản:

Thay vì xuất bản để http://mynugetserver/api/v2/, sử dụng:http://mynugetserver/

+0

cảm ơn hoàn hảo vì đã chia sẻ! –

0

gì làm việc cho tôi là trong bài viết này:

http://blogs.blackmarble.co.uk/blogs/rfennell/post/2012/10/31/403-and-413-errors-when-publishing-to-a-local-Nuget-Server.aspx

"Quan trọng: Lỗi thứ hai này là một cá trích đỏ, bạn không cần/nuget ở cuối URL "

+1

Bạn không cần/nuget ở cuối URL * khi đẩy gói *. Bạn * làm * khi truy xuất chúng (danh sách nuget, v.v ...). Đây là trong doco, nhưng ... sheesh. Cách gây nhầm lẫn cho mọi người. – piers7

2

Dựa trên @Keith@Nubigetter 's câu trả lời, tôi đã làm một số nghiên cứu thêm, bởi vì các hành vi có vẻ thực sự kỳ lạ với tôi.

Câu trả lời là thực sự trong documentation cho Nuget.Server (nếu bạn nhìn rất cẩn thận), nó chỉ là không phải là rất rõ ràng:

Tôi đã nêu điều này với nhóm Nuget tại đây https://github.com/NuGet/NuGetGallery/issues/2903 vì tôi coi hành vi này là 'trình bày cơ hội cải tiến'.

Các vấn đề liên quan