7

Gần đây chúng tôi đã nâng cấp dự án của mình từ MVC 3 lên MVC 4. Chúng tôi đang nhắm mục tiêu khuôn khổ .NET 4.0 và ứng dụng web của chúng tôi là 32 bit do một số tài liệu tham khảo chúng tôi phải đưa vào.ASP.NET/MVC 4 bundling và minification 404 vấn đề trên 64-bit IIS 7.5 server

Vấn đề chúng tôi đang gặp phải là chúng tôi đã chuyển đổi gói/rút gọn của chúng tôi từ Chirpy thành gói tích hợp sẵn trong ASP.NET. Trang web chạy không có vấn đề gì trên các máy chủ 32 bit, cả Windows Server 2003/IIS 6 và 2008/IIS 7.5 chỉ chạy .NET 4.0 và các máy phát triển 64 bit của chúng tôi. Các bundling/minification hoạt động tốt trên tất cả các bên trên.

Trên máy chủ Windows 2008/IIS 7.5 64 bit chỉ có cài đặt .NET 4.0, gói không hoạt động. Chúng tôi nhận được lỗi 404 cho cả tập lệnh và kiểu được tạo.

Nếu chúng tôi cài đặt .NET 4.5 trên máy chủ 64 bit, nó hoạt động tốt. Chúng tôi đang bối rối bởi vì một số máy chủ làm việc mà không có .NET 4.5, và điều này đòi hỏi nó. Trên hết, Windows Server 2003/64-bit không tương thích với .NET 4.5 vì vậy nếu vấn đề đó có vấn đề, sửa lỗi này sẽ không hoạt động.

Điều kỳ lạ là, mẫu MVC 4 mẫu nhắm mục tiêu ứng dụng internet .NET 4.0 được xây dựng x86 hoạt động tốt với chỉ 4.0 trên máy chủ sự cố. Web.config giống hệt nhau ngoại trừ sự thống nhất, ghi nhật ký, elmah và cấu hình ít dấu chấm hơn.

Bất kỳ trợ giúp nào về điều này sẽ được nhiều người đánh giá cao.

Đây là BundleConfig.cs:

using System.Web; 
using System.Web.Optimization; 

namespace WebApp 
{ 
    public class BundleConfig 
    { 
     public static void RegisterBundles(BundleCollection bundles) 
     { 
      bundles.UseCdn = false; 

      // .debug.js, -vsdoc.js and .intellisense.js files 
      // are in BundleTable.Bundles.IgnoreList by default. 
      // Clear out the list and add back the ones we want to ignore. 
      // Don't add back .debug.js. 
      bundles.IgnoreList.Clear(); 
      bundles.IgnoreList.Ignore("*-vsdoc.js"); 
      bundles.IgnoreList.Ignore("*intellisense.js"); 

      bundles.Add((new ScriptBundle("~/bundles/WebApp.Register1")).Include("~/Scripts/jquery.ba-tinypubsub.min.js",  
                       "~/Scripts/knockout-2.1.0.js", 
                       "~/Scripts/WebApp/WebApp.Register.RegisterStudent.js", 
                       "~/Scripts/WebApp/WebApp.Register.RegisterPresenter.js")); 

      bundles.Add((new Bundle("~/bundles/WebApp.Register2")).Include("~/Scripts/WebApp/WebApp.Register.StudentSelect.js")); 


      bundles.Add((new ScriptBundle("~/bundles/WebApp.View1")).Include("~/Scripts/jquery.ba-tinypubsub.min.js", 
                      "~/Scripts/WebApp/WebApp.View.ImagePresenter.js", 
                      "~/Scripts/WebApp/WebApp.View.ImageResults.js")); 

      bundles.Add((new Bundle("~/bundles/WebApp.View2")).Include("~/Scripts/WebApp/WebApp.View.StudentsSelect.js")); 

      bundles.Add((new ScriptBundle("~/bundles/WebApp.Print1")).Include("~/Scripts/WebApp/WebApp.Print.SelectedIdArray.js", 
                       "~/Scripts/jquery.ba-tinypubsub.min.js", 
                       "~/Scripts/WebApp/WebApp.Print.DocumentsSelect.js", 
                       "~/Scripts/WebApp/WebApp.Print.DocumentsSelected.js", 
                       "~/Scripts/WebApp/WebApp.Print.DocumentsPresenter.js", 
                       "~/Scripts/WebApp/WebApp.Print.StudentsPresenter.js", 
                       "~/Scripts/WebApp/WebApp.Print.PrinterSelected.js", 
                       "~/Scripts/WebApp/WebApp.Print.OutputSummary.js", 
                       "~/Scripts/WebApp/WebApp.Print.OutputPresenter.js", 
                       "~/Scripts/WebApp/WebApp.Print.NoStudentPresenter.js")); 

      bundles.Add((new Bundle("~/bundles/WebApp.Print2")).Include("~/Scripts/WebApp/WebApp.Print.StudentsSelect.js", 
                     "~/Scripts/WebApp/WebApp.Print.StudentsSelected.js")); 

      bundles.Add((new ScriptBundle("~/bundles/WebApp.Main")).Include("~/Scripts/modernizr.custom.33607.js", 
                      "~/Scripts/jquery-1.6.1.js", 
                      "~/Scripts/jquery-ui-1.8.10.custom.min.js", 
                      "~/Scripts/jquery-ui.min.js", 
                      "~/Scripts/json.js", 
                      "~/Scripts/jquery.validate.min.js", 
                      "~/Scripts/jquery.marquee.js", 
                      "~/Scripts/YUI.js", 
                      "~/Scripts/Common.SearchHighlight.js")); 

      bundles.Add((new StyleBundle("~/bundles/Content/WebApp.Main")).Include("~/Content/jquery.marquee.min.css", 
                         "~/Content/YUI.css", 
                         "~/Content/Site.css", 
                         "~/Content/ui-lightness/jquery-ui-1.8.10.custom.css")); 
     } 
    } 
} 

Đây là cách chúng tôi tham khảo các bó trong cách bố trí của chúng tôi:

@Scripts.Render("~/bundles/WebApp.Main") 
    <link href="@Url.Content("~/Content/SiteLess.less")" rel="stylesheet" type="text/css" /> 
    @Styles.Render("~/bundles/Content/WebApp.Main") 
    ... 

EDIT: Responses/cập nhật

  • Có, Cờ ứng dụng 32 bit được bật được đặt thành True trong nhóm ứng dụng.
  • Đường dẫn đến yêu cầu cung cấp cho 404 trông giống như http://xx.xx.xx.xxx/WebApp/bundles/WebApp.Main?v=03pBc7hdH1lHLtZGx-JMosNaLpMK7fcmI0uI6auknHw1
  • của Windows xem sự kiện này cho thấy không có gì
  • Nó hoạt động sau khi cài đặt .NET 4.5, gỡ bỏ cài đặt nó, sau đó cài đặt lại NET 4.0
  • Nó hoạt động trên một máy chủ 64-bit của doanh nghiệp 2008. Máy chủ sự cố là phiên bản tiêu chuẩn. Chúng tôi sẽ xây dựng lại máy ảo để xem có khắc phục được sự cố không.
+3

Điều này có thể giúp http://forums.asp.net/t/1846749.aspx/2/10?Published+MVC+web+to+IIS7+in+Windows+Server+2008+doesn+t+serve+ bó – Jack

+2

Đăng BudleConfig.cs của bạn, vui lòng – CrazyCoderz

+0

@Xin cảm ơn, chúng tôi đã đọc qua chuỗi đó và thực hiện các thay đổi được đề xuất, nhưng nó không giúp ích gì. Chúng ta thực sự hoạt động tốt với hộp chỉ với .NET 4.0 và .NET 4.5 được cài đặt trên hộp 64-bit. Tôi không nghĩ .NET 4.5 là một yêu cầu. – Dustin

Trả lời

1

Sự cố có vẻ như với cài đặt .NET 4.0 trên máy ảo mà chúng tôi đang sử dụng cho máy chủ đó. Sau khi tạo hai máy ảo mới (cả Windows 2008 64 bit, một doanh nghiệp tiêu chuẩn) với cài đặt .NET 4.0 sạch, gói hoạt động tốt trên cả hai. Cảm ơn vì sự giúp đỡ.

+0

Bạn có thể chia sẻ chi tiết về những gì "sạch. NET 4.0" có nghĩa là – nothingisnecessary

+0

Sạch sẽ có nghĩa là một cài đặt hoàn toàn mới của .NET 4.0. Tôi thấy bình luận của bạn dưới đây, đó là thú vị. Tôi không thể kiểm tra điều này vì tôi đang ở một công việc mới ngay bây giờ. – Dustin

+2

Chỉ dành cho những người khác có vấn đề này, tôi đã giải quyết phiên bản của mình bằng cách thêm mục nhập vào phần web.config để thêm BundleModule:

2

Môi trường mà ban đầu bạn gặp phải sự cố 404 có thể không áp dụng hotfix URL không mở rộng.

Xem http://support.microsoft.com/kb/980368

Thật trùng hợp, bạn "làm sạch .NET 4.0" cài đặt hoặc là một phiên bản chậm nhất là 4,0 (có lẽ 4,5?) Hoặc bạn có thể đã vô tình áp dụng hotfix/cập nhật để cho phép hỗ trợ cho URL extensionless.

Tôi gặp sự cố tương tự trong các hộp Windows Server 2008 (Enterprise, cả 32bit và 64bit), nơi gói không bị lỗi khi chạy (chính xác là tạo gói và hiển thị chính xác URL gói, như /app/bundles/my_script), nhưng IIS đã trả lại 404 cho URL gói. Tôi đã cài đặt hotfix 980368 và các gói bắt đầu hoạt động.