2012-09-19 64 views
50

Rõ ràng là tôi đang thiếu thứ gì đó, tôi không thể triển khai một ứng dụng ASP.NET MVC 4, .NET 4.5 đơn giản trên Windows Small Business Server 2008 trên IIS 7.ASP.NET 4.5 MVC 4 không hoạt động trên Windows Server 2008 IIS 7

Khuôn khổ .NET 4.5 được cài đặt.

Tôi có nên xem phiên bản đó (4.5) trên cài đặt cơ bản của Ứng dụng Pool không? Tại thời điểm này, tôi chỉ có 2.0 và 4.0, vì 4.5 giống như 3.5 mà chỉ thêm trên đầu khung 4.0, tôi đoán điều này là bình thường.

Khi tôi duyệt trang chủ, tôi gặp lỗi sau:

403 - Bị cấm: Truy cập bị từ chối. Bạn không có quyền xem thư mục hoặc trang này bằng thông tin đăng nhập mà bạn đã cung cấp.

Khi tôi yêu cầu bộ điều khiển duy nhất có tên Trang/trang/chỉ mục, tôi nhận được trang 404 không tìm thấy. Giống như quá trình ASP.NET không bao giờ nhận được yêu cầu http.

Tôi có thể yêu cầu trang HTML đơn giản.

Hồ bơi ứng dụng được đặt thành .NET 4.0 và Tích hợp làm chế độ đường ống Được quản lý.

DỊCH VỤ MẠNG có quyền truy cập đọc/ghi vào thư mục.

Ứng dụng hoạt động hoàn hảo từ VS2012 tất nhiên.

Tôi không biết gì về những gì không đúng ở đây và các truy vấn công cụ tìm kiếm không giúp ích gì nhiều.

Có ai có gợi ý không, điều đó sẽ vô cùng được đánh giá cao. Cảm ơn

Sửa

Các dlls là đã vào thư mục bin như System.Web.Mvc, System.Web.Razor, vv

Tôi tạo ra một trang test.aspx trống để đảm bảo quá trình công nhân asp.net đã nhận được yêu cầu, và có trang là OK. Vì vậy, nó xuất hiện rằng định tuyến MVC là không làm việc, mặc dù tôi có ASP.NET MVC 3 ứng dụng web làm việc tốt trên máy chủ đó.

Sau khi cài đặt .NET 4.5 tôi đã làm một aspnet_regiis -iru trong trường hợp, thêm một thư mục aspnet_client trên ứng dụng, nhưng điều này vẫn không khắc phục được sự cố.

Xác thực ẩn danh được bật trên phần Xác thực IIS và Hiển thị ủy quyền cho phép tất cả người dùng.

ASP.NET MVC 4 được cài đặt, tôi vừa sửa chữa để đảm bảo.

Mặc dù ASP.NET MVC 4 được cài đặt, lỗi 404 do yêu cầu hành động/trang/chỉ mục được trả về bởi IIS chuẩn và không phải lỗi aspnet chuẩn. Vì vậy, thực sự nó xuất hiện như khung MVC 4 không được cài đặt đúng cách, bởi tôi chỉ cần kiểm tra lại và thực hiện sửa chữa. Tôi có thể tiếp tục điều tra ở đâu?

@Mystere Man, tôi đã thay đổi Xác thực ẩn danh để sử dụng nhận dạng Hồ bơi ứng dụng, dừng, khởi động ứng dụng và vẫn gặp lỗi tương tự. Nó thực sự trông giống như nếu ASP.NET MVC 4 không nhận yêu cầu.

Đây là một phần của web.config:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    </entityFramework> 

Sửa 2012/09/27

Tôi đã sửa chữa Microsoft .NET Framework 4.5 và sửa chữa các ASP.NET MVC 4 , triển khai lại ứng dụng ASP.NET MVC 4 đơn giản và tôi vẫn nhận được hành vi tương tự. Tôi không chắc phải làm gì tiếp theo, vì vậy tôi bắt đầu một tiền thưởng với hy vọng rằng ai đó có thể giúp tôi tìm ra vấn đề.

Sửa 2014/01/31

Khi tôi hỏi câu hỏi đó, tôi gắn cờ các runAllManagedModulesForAllRequests là câu trả lời chấp nhận bởi vì nó đã giải quyết vấn đề. Nhưng tôi chắc chắn sẽ không sử dụng nó trong sản xuất. Tôi hỏi tại sao tôi phải làm điều này và không có bất kỳ câu trả lời nào.

Hơn Martin Hollingsworth câu trả lời thực sự là những gì tôi đang tìm kiếm, một cách tốt để khắc phục sự cố này mà không có tất cả các vấn đề về hiệu suất liên quan đến runAllManagedModulesForAllRequests.

Chúng tôi gần như đã từ bỏ và mua một máy chủ Windows 2012 mới (từ đó ứng dụng ASP.NET MVC hoạt động như cũ). Sau khi thử nghiệm giải pháp của Martin, máy chủ Windows 2008 đã hoạt động.

+0

Bạn có thể xác nhận lại rằng App Pool đang chạy trong tài khoản MẠNG DỊCH VỤ KHÔNG? –

+0

Có hồ bơi ứng dụng sử dụng tài khoản NetworkService (từ danh sách thả xuống được tích hợp sẵn) –

+0

Bạn đã bật Xác thực Chưa xác định (hoặc bất kỳ Xác thực nào bạn đang định sử dụng)? –

Trả lời

41

Nếu bạn là không thể áp dụng QFE from kb 980368, thay vì sử dụng runAllManagedModulesForAllRequests giải pháp như đề xuất trong chấp nhận answer, bạn nên sử dụng cấu hình mô-đun với điều kiện tiên quyết = "" hình dưới đây để tránh tiêu cực tác động lên nội dung tĩnh như được mô tả trong các bài đăng trên blog How asp.NET MVC Routing Works and its Impact on the Performance of Static RequestsDon't use runAllManagedModulesForAllRequests="true" when getting your MVC routing to work và một số nhận xét về câu trả lời.

Scott Hanselman's blog post about runAllManagedModulesForAllRequests nên thêm một số trọng số cho đối số này. Rick Strahl's post Caveats with the runAllManagedModulesForAllRequests in IIS 7/8 là giải thích tốt nhất về sự tương tác giữa các cài đặt mà tôi đã tìm thấy. Tài liệu IIS trên module preCondition attribute cũng đáng đọc.

Hãy nhớ rằng thay đổi cấu hình này là không cần thiết nếu bạn đã áp dụng QFE vì hành vi này trở thành mặc định.

<system.webServer> 
    <modules> 
    <remove name="UrlRoutingModule-4.0" /> 
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
    </modules> 
</system.webServer> 
+0

Vâng, đây là cách tốt để khắc phục sự cố, chúng tôi đã mua một Win 2012 hoạt động tốt và tôi đã thử với giải pháp của bạn về lỗi Win 2008 và hoạt động như mong đợi. Chúng tôi thậm chí sẽ giữ máy chủ 2008 ngay bây giờ mà nó hoạt động mà không có runAllManageModulesForAllRequests. –

+0

Nếu bạn có Windows 2008 Server với IIS 7.0 (không phải R2) thì đây là liên kết tải xuống hotfix: http://www.microsoft.com/en-us/download/details.aspx?id=11342 –

+0

Brilliant ! Thành công lớn, rất đẹp! – maxwellb

44

Hãy thử sử dụng này:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    ... 
</system.webServer> 

EDIT:

Các giải pháp trên sẽ làm việc cho .NET 3.5 hoặc thấp hơn. Nếu bạn đang sử dụng .NET 4.0 trở lên, bạn có thể muốn thử installing IIS7 QFE

Ngoài ra, this article đáng đọc để hiểu sự khác biệt giữa hai loại này.

+0

Kiểm tra nhật ký ứng dụng của EventViewer để tìm lỗi. Kiểm tra nhật ký IIS từ vị trí C: \ inetpub \ logs để biết yêu cầu cho trang. Tiếp theo chia sẻ những thông tin này ở đây để dễ giải quyết vấn đề hơn. –

+0

điều này khắc phục được sự cố, nhưng tại sao một web.config không hoạt động như cũ. tức là tại sao tôi buộc phải thêm thuộc tính này và có bất kỳ vấn đề hiệu suất nào cho phép điều này không? Cảm ơn –

+4

Cài đặt này yêu cầu IIS chạy mô-đun được quản lý cho bất kỳ yêu cầu nào, ngay cả đối với các yêu cầu tĩnh (ví dụ: hình ảnh, .css, .js, ...), vì vậy nó ảnh hưởng đến hiệu suất cho các yêu cầu đó. Bạn có thể muốn đọc [bài viết này để biết thêm thông tin] (http://blogs.msdn.com/b/tmarq/archive/2010/04/01/asp-net-4-0-enables-routing-of- extensionless-urls-without-impacting-static-requests.aspx). Tác giả của bài viết này cũng cung cấp một giải pháp khác mà bạn có thể muốn thử: [cài đặt IIS7 QFE] (http://support.microsoft.com/kb/980368). – kdrvn

0

Tôi không biết điều này có khắc phục được sự cố của bạn hay không nhưng nó đã khắc phục sự cố mà tôi đã triển khai và ứng dụng MVC với IIS.

Tôi phải thêm bản đồ ứng dụng ký tự đại diện vào aspnet_isapi.dll cho thư mục home/virtual của ứng dụng. Bạn có thể làm điều này bằng cách kích chuột phải vào thư mục web/virtual và chọn thư mục home/virtual directory tab, nhấn vào nút cấu hình và sau đó nhấn nút Insert bên dưới phần bản đồ ứng dụng ký tự đại diện.

C: \ WINDOWS \ microsoft.net \ Framework64 \ v4.0.30319 \ aspnet_isapi.dll

Chúc may mắn!

9

Tôi đã có một vấn đề tương tự. Tôi đã thử nhiều giải pháp được mô tả ở đây (mục nhập cấu hình Web.Config system.webServer, v.v.) không có kết quả. Cuối cùng, tôi phát hiện ra vấn đề là gì với cài đặt cụ thể của tôi. Tôi đã xuất bản trang web của mình lên hệ thống tệp cục bộ và sau đó sao chép các tệp đó vào máy chủ. Nó bật ra rằng tập tin Global.asax không phải là một phần của các tập tin được xuất bản. Khi tôi sao chép tập tin đó, lỗi đã biến mất.

+4

Người đàn ông, câu trả lời của bạn xứng đáng được +1000, nghiêm túc! Tôi đã dành nửa ngày "khắc phục sự cố" định tuyến bị hỏng, chỉ để nhận ra rằng tôi đã quên triển khai 'Global.asax'. – uncoder

+0

Rất vui khi được giúp đỡ! :) –

1

Như đã đề cập bởi SonicTheLichen, nếu bạn xuất bản từ Visual studio, tệp gloabal.asax không được sao chép theo mặc định. Bằng cách sao chép global.asax vào máy chủ web của bạn, hãy giải quyết vấn đề. Cảm ơn SonicTheLichen đã chứng minh giải pháp.

Trân trọng, Saurabh

0

Tôi gặp vấn đề tương tự. Tôi đã phải triển khai một trang web MVC .net đến một máy chủ mới với Windows 2008 và IIS 7.5 được cài đặt. Khi tôi kiểm tra các chương trình và tính năng, tôi thấy rằng chỉ có .Net Framework 4.5.1 được cài đặt. Tôi đã bật tính năng Windows .Net 3.5.1 theo cách thủ công. Sau khi tôi cài đặt MVC 4.0 định tuyến không hoạt động.

Giải pháp của tôi:
1) Hủy bỏ khuôn khổ Net 4.5.1 và MVC 4,0
2) Cài đặt .Net Framework 4.0
3) Cài đặt .Net framework 4.5.1
4) Cài đặt MVC 4.0

0

tôi biết điều này là cũ, nhưng cửa sổ chỉ là bây giờ thông báo Trang lãng phí một vài giờ cho tôi:

NẾU bạn xử lý ngoại lệ của bạn trong Global.asax này cũng có thể đơn giản như việc giữ các cửa sổ cập nhật giống như dev của bạn env ... Đối với tôi, tôi không rõ ràng, kết quả này d trong một "không thể tải ...." ngoại lệ, mà global.asax của tôi đã cố gắng để xử lý và lần lượt có cùng một vấn đề nhưng ẩn vấn đề cơ bản .....

0

Tôi đã phải kích hoạt tập lệnh trong Phần Ánh xạ xử lý của thuộc tính trang web trong IIS.

Handler Mappings

Mở IIS, nhấp vào trang web được đề cập. Mở Handler Mappings và nhấp vào "Edit Feature Permissions". Chọn các hộp cho Script và Execute, sau đó nhấn OK. Tốt để đi!

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