2010-02-23 7 views
14

Tôi có một vấn đề di cư từ VS.Net 2008/MVC 1 để VS.NET 2010 (+ C# 4.0)/MVC 2Triển khai Asp.Net MVC 2/C# 4.0 ứng dụng trên IIS 6

các web.config has been updated, trang web chạy tốt trong Cassini, nhưng vấn đề của tôi bây giờ đang triển khai trên IIS 6.

tôi cập nhật trang web chạy sử dụng ASP.Net 4, nhưng bất cứ điều gì URL tôi cố gắng, tôi luôn luôn có một 404 lỗi. Nó giống như định tuyến đã không được đưa vào tài khoản (có, wildcard mapping đã được thực hiện).

Tôi không hiểu mớ hỗn độn này và không thể google bất cứ điều gì thú vị ... Cảm ơn đề xuất của bạn!

+0

tôi đã cố gắng để triển khai các dự án mặc định được tạo sử dụng 'thêm dự án mới ...' và gặp phải những vấn đề tương tự. Vẫn googling cho câu trả lời, nhưng hy vọng cho lời khuyên của bạn .... – Mose

+1

Tôi luôn luôn có hơi say với bản đồ ký tự đại diện và hộp kiểm "xác minh tập tin tồn tại" chết tiệt. Chà sạch mọi thứ, bắt đầu từ hình vuông, và làm theo: http://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/ và khi tôi nói chà tất cả mọi thứ , Ý tôi là SCRUB EVERYTHING. Đừng cho rằng cái gì là chính xác. Bắt đầu tại một hình vuông và ba kiểm tra tất cả mọi thứ. – Will

+0

Tôi đã làm điều đó một lần nữa nhưng nó vẫn không hoạt động. Ứng dụng tôi đang làm việc đang hoạt động hoàn hảo trong MVC 1, nhưng kể từ khi tôi chuyển sang .Net 4/MVC 2, định tuyến bị hỏng ... Như tôi đã nói trong bình luận trước đây, tôi đã thử với ứng dụng mẫu và không thể thực hiện nó hoạt động. Cảm ơn sự giúp đỡ của bạn. Bất kỳ đề xuất nào khác? – Mose

Trả lời

15

Ok tôi đã y câu trả lời (nhờ một đồng nghiệp)

Khi chuyển từ ASP.Net 2.0 để ASP.Net4.0, nếu bạn gặp vấn đề tương tự, sau đó kiểm tra trong Dịch vụ Web mở rộng nếu ASP.Net v4 là Được phép.

Trong trường hợp của tôi, sau khi cài đặt .Net framework 4, nó đã bị cấm.

Sẽ & Đánh dấu: cảm ơn sự giúp đỡ của bạn, hy vọng nó sẽ giúp người khác.

6

Tôi nghĩ mình biết điều gì đang xảy ra: trên IIS6, cũng như ánh xạ ký tự đại diện, bạn sẽ cần một tài liệu mặc định (Default.aspx) để định tuyến các yêu cầu thư mục tới trình xử lý MVC.

Có một mẫu đi kèm với các mẫu dự án MVC1, nhưng it has been removed trong MVC2.

Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="YourNameSpace._Default" %> 

<%-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --%> 

Default.aspx.cs:

using System.Web; 
using System.Web.Mvc; 
using System.Web.UI; 

namespace YourNameSpace 
{ 
    public partial class _Default : Page 
    { 
     public void Page_Load(object sender, System.EventArgs e) 
     { 
      // Change the current path so that the Routing handler can correctly interpret 
      // the request, then restore the original path so that the OutputCache module 
      // can correctly process the response (if caching is enabled). 

      string originalPath = Request.Path; 
      HttpContext.Current.RewritePath(Request.ApplicationPath, false); 
      IHttpHandler httpHandler = new MvcHttpHandler(); 
      httpHandler.ProcessRequest(HttpContext.Current); 
      HttpContext.Current.RewritePath(originalPath, false); 
     } 
    } 
} 

Khi bạn nói "Cứ như thể định tuyến không được đưa vào tính toán", tôi nghi ngờ rằng nó thực sự không phải là, và điều này đó là vấn đề của bạn.

+0

Cảm ơn câu trả lời của bạn. Thật không may, tôi đã có một Default.aspx với gần như cùng một mã phía sau. Tôi đã cố gắng sử dụng mã của bạn (sự khác biệt duy nhất là kết thúc Rewritepath quay lại đường dẫn ban đầu), nhưng nó vẫn không hoạt động. Tuy nhiên, tôi có một CLUE BIG: khi tôi thử url gốc của tôi (hoặc bất kỳ url nào cho ứng dụng đó), IIS trả lại cho tôi lỗi 404 RẤT NHANH, sự kiện sau khi khởi động lại iisreset hoặc máy chủ. Tôi cho rằng nó không tải bất cứ thứ gì! Kiểm tra các vấn đề theo cách đó với C# 4.0. (FYI, url là http://push.widgetbooster.com) – Mose

+0

Wow Tôi đã phát điên với vấn đề này (tôi sử dụng mvc 2 in .net 3.5 w/IIS 6) nhưng điều này đã giải quyết được! cảm ơn! – Francisco

2

Điều này cuối cùng đã khắc phục sự cố cho tôi:

Tôi đã nhận xét trước đó và sớm hơn một chút. Nhận xét của tôi cho bài viết của Mark B đã nhận được chế độ xem Chỉ mục ban đầu của tôi để hiển thị, nhưng sau đó tôi đã nhận được lỗi 404 bất cứ khi nào tôi điều hướng đến bất kỳ chế độ xem nào khác.

Tôi cũng bị phân tâm bởi giải pháp được đánh dấu kiểm tra màu xanh lá cây trong diễn đàn cụ thể này, nhưng tôi thậm chí không thể thấy thư mục tiện ích mở rộng máy chủ web trong IIS 6 trên máy tính để bàn của mình; do đó, tôi không có quyền kiểm soát từ điểm đứng đó cho phép aspnet 4.0, mặc dù tôi đã chắc chắn rằng nó đã được cài đặt bằng cách thực hiện chạy dòng lệnh sau:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319> aspnet_regiis -i 

Bây giờ cho các mảnh thực tế mà cuối cùng cho phép tôi để điều hướng đến các quan điểm khác ngay bên cạnh tôi Home/Index:

trong tập tin Global.asax.cs của giải pháp VS 2010, bạn sẽ thấy mã như sau trong RegisterRoutes phương pháp:

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

tôi chỉ cần thêm ".aspx" sau khi {action} phần của thẻ như sau:

012.
routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}.aspx/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

Và ahla wahla Bơ đậu phộng và bánh mì kẹp thạch. : 0)

0

Nếu bạn muốn làm điều đó trong C#, chỉ cần thêm tham chiếu System.DirectoryServices và phần này sẽ thực hiện công việc một cách độc đáo.

DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/W3SVC"); 
w3svc.Invoke("EnableWebServiceExtension", "ASP.NET v4.0.30319"); 
w3svc.CommitChanges(); 

HTH