2010-05-24 28 views
5

Tôi đã tạo một ứng dụng ASP.NET MVC 2 trong Visual Studio 2008. Tôi đã thiết lập bản phát hành để đi qua trình biên dịch ASP.NET để biên dịch trước tất cả các khung nhìn, rút ​​gọn Javascript và CSS, dọn dẹp web.config, vv Kể từ khi triển khai sản xuất sẽ đến một máy chủ IIS6, tôi thiết lập triển khai sản xuất giả trên máy tính Windows 7 của mình để chạy pool ứng dụng ở chế độ cổ điển nhắm mục tiêu thời gian chạy 2.0 . Tôi thiết lập trình xử lý mở rộng trong web.config đó là cần thiết và mọi thứ hoạt động tốt.Triển khai ASP.NET MVC 2 sang mục tiêu IIS 7.5 .NET 3.5

Sự cố xảy ra khi tôi nâng cấp giải pháp lên Visual Studio 2010. Tôi vẫn nhắm mục tiêu 3.5 khung, nhưng bây giờ tôi đang sử dụng MSBuild 4.0 vì đó là những gì Visual Studio 2010 sử dụng. Mọi thứ vẫn biên dịch chính xác bởi vì nó chạy tốt dưới Cassini, nhưng khi tôi triển khai nó đến cùng một vị trí (cùng một nhóm ứng dụng, nhận dạng, vv), nó bây giờ hoạt động khác nhau. Tôi vẫn có trình xử lý mở rộng trong web.config, nhưng bây giờ khi tôi điều hướng đến thư mục gốc của ứng dụng nó duyệt thư mục và bất kỳ tuyến nào mà nó đã xử lý trước đây trở lại khi lỗi 404 được xử lý bởi trình xử lý StaticFile trong IIS . Tôi đang thua lỗ vì những gì đã thay đổi và đang gây ra sự cố.

Tôi đã xem this question, nhưng tôi đã xác minh rằng tất cả các thành phần tiên quyết được cài đặt.

Trả lời

3

Bạn đã thử gỡ lỗi tuyến đường bằng cách sử dụng Phil Haack route debugger trên máy chủ?

Edit:
Mở IIS 7.5 bạn không cần bất kỳ xử lý extensionless đặc biệt, điều này được xử lý tự động, bạn không cần phải thay đổi bất cứ điều gì. Nó chỉ là cần thiết trên IIS 6 theo như tôi biết. Đó có phải là vấn đề không? nếu bạn loại bỏ trình xử lý đặc biệt đó thì sao? có lẽ đây là những gì được ngăn chặn nó để đá trong động cơ tuyến đường.

Edit:
Tôi đôi kiểm tra, và như tôi nghĩ, bắt đầu trên IIS7, chế độ mặc định của một AppDomain là tích hợp Chế độ. Điều này có nghĩa là ngăn xếp Asp.net khởi động mọi yêu cầu, trong khi ở chế độ cổ điển, asp.net chỉ được gọi khi một phần mở rộng cụ thể được gọi (aspx ashx axd được ánh xạ theo mặc định cho bộ lọc aspnet_isapi).
UrlRoutingModule đang khởi động mọi yêu cầu mà không yêu cầu bất kỳ điều gì từ bạn vì nó là một HttpModule chứ không phải là Trình xử lý. (nó chỉ cần được đăng ký trong tập tin cấu hình của ứng dụng của bạn, không cần phải bản đồ nó vào một phần mở rộng, nhưng đó là theo mặc định trong một ứng dụng MVC.Bạn có thể mở tệp Web.Config và xác minh rằng bạn có dưới một nút

<modules runAllManagedModulesForAllRequests ="true"> 
... 
<add name="UrlRoutingModule" type=.../> 
</modules> 

bạn có chắc bạn triển khai các hội đồng MVC đến máy chủ? Kiểm tra xem System.Web.Mvc, System.Web.RoutingSystem.Web.Abstraction tài liệu tham khảo có copy Thuộc tính cục bộ được đặt thành true để đảm bảo bạn sử dụng cùng một cụm cục bộ và trên máy chủ sản xuất của bạn ...

Nếu tất cả những điều đó là chính xác, tôi không biết cách giúp bạn nhiều hơn nữa ... Tôi hy vọng điều này sẽ giúp bạn, hoặc ít nhất là đưa bạn đi đúng hướng.

EDIT: Oww ... vừa đọc nhận xét cuối cùng của bạn ... xin lỗi Tôi đã bỏ qua yếu tố đó về chế độ cổ điển. Tiêu đề của bạn đề cập đến IIS7.5 và tôi giả định quá nhiều thứ.đó là lý do tôi bối rối.

Thành thật mà nói, tôi phải tìm trong cuốn sách của Steven Sanderson. Anh ta có một danh sách kiểm tra để khắc phục sự cố triển khai IIS6. Tôi biết bạn đang nói rằng nó chỉ khi sử dụng MSBuild 4 mà nó không thành công, nhưng nó vẫn có thể hữu ích

Kiểm tra Default.aspx được đặt làm trang nội dung mặc định. Đó có thể là nguồn của 404.

Sau đó, để có url không mở rộng, lần cuối tôi triển khai đến IIS6 Tôi đã sử dụng bản đồ ký tự đại diện đơn giản và tôi chưa bao giờ gặp sự cố ... Nếu bạn vẫn gặp sự cố xin lỗi, tôi giúp đỡ could'nt ... không phải là tôi didnt thử :) may mắn

+0

Nó không đánh động cơ định tuyến. Đó chính là vấn đề. Mặc dù web.config được cấu hình, IIS dường như bỏ qua nó và trả về nó là tiêu chuẩn 404. Kích hoạt tính năng dò tìm IIS cho thấy rằng các trình xử lý định tuyến và các mô-đun không được thực hiện. –

+0

Để phản hồi chỉnh sửa của bạn, tôi cần trình xử lý trong đó khi được biên dịch bằng MSBuild 3.5. Nếu không IIS không biết gửi trang thông qua công cụ định tuyến. –

+0

hm, tôi hơi bối rối bởi vì Trình xây dựng không nên thay đổi bất cứ điều gì ở tất cả các yêu cầu xử lý liên quan. Vấn đề của bạn dường như xảy ra ngay cả trước khi nó chạm vào ứng dụng của bạn. Bạn có thể kiểm tra xem hồ bơi ứng dụng của mình có đang chạy ở Chế độ tích hợp không?Tôi phải rời khỏi đây ngay bây giờ, nhưng sau này tôi sẽ đăng câu trả lời mở rộng. –

0

ý tưởng Couple thử

  • bạn đã chạy bất kỳ loại so giữa đầu ra của VS2008 và VS2010 dự án? Chỉ cần xác minh rằng nâng cấp giải pháp không thay đổi bất kỳ thứ gì.
  • Bạn có thuộc tính web.config targetFramework được đặt trên thành phần compilation?
  • Bạn có chắc chắn bạn không đang chạy vào một cái gì đó như chạy một ứng dụng x86 trong một hồ bơi ứng dụng x64?

Tôi đoán bạn đã ổn với những điều đó, nhưng vì Cassini không gặp sự cố với ứng dụng, tôi vẫn dựa vào các vấn đề về web.config. Bạn có các module/trình xử lý của bạn được đăng ký đúng trong phần tử? Vì bạn đang chạy Chế độ cổ điển, bạn sẽ cần cả "cũ" và "mới" (reference 1, reference 2).

+0

không có targetFramework trong web.config, nhưng tôi đã đặt targetFrameworkVersion trong tệp dự án. Vì tôi đang biên dịch trước nó và triển khai nó vào IIS trong cả hai kịch bản, tôi không biết liệu web.config có cần thiết hay không. Đối với các kết quả đầu ra giữa hai nó là khó khăn để làm so sánh nhị phân kể từ khi tôi đang sử dụng Entity Framework và nó đã thực hiện một số thay đổi cho nó cho bộ công cụ VS2010. –

+0

Cập nhật nhanh. Tôi đã thử đặt thuộc tính targetFramework trên phần tử biên dịch và cố gắng xây dựng dự án dẫn đến VS2010 nói rằng nó không cần thiết trước khi nhắm mục tiêu khung 4.0. Ngoài ra, tôi nghi ngờ đó là vấn đề x86 vs x64 khi tôi biên dịch và chạy đúng trên phần cứng và hệ điều hành x86. –

+0

Bất kỳ may mắn nào có đăng ký module/handler trong web.config? Đó là một trong những trông đầy hứa hẹn nhất và phù hợp với "triệu chứng" – Josh

-3

Tôi đã đăng giải pháp này trong một chuỗi khác, nhưng tôi sẽ lặp lại chính mình. Sử dụng classic mode đường ống của AppPool:

alt text http://img823.imageshack.us/img823/3684/20100612135212.png

Cũng dot't quên để cài đặt HTTP Redirection mô-đun trong Turn Windows Features On hoặc tắt.

+0

Nếu bạn nhìn vào phản ứng của tôi để @stephanie bạn sẽ thấy tôi đã chạy AppPool ở chế độ cổ điển. Và nếu bạn đã xem xét liên kết trong câu hỏi, tôi đã nói rằng tôi đã có các thành phần tiên quyết đã được cài đặt (bao gồm cả chuyển hướng HTTP). –

2

Tôi đã gặp sự cố này ngày hôm nay, trong một trường hợp tương tự.

Sự cố trong trường hợp của tôi là do thực tế là các bit 32 bit đã được đăng ký thay vì 64 bit, gây ra sự cố với định tuyến.

Nó đã được giải quyết bằng cách gõ sau tại dấu nhắc lệnh

CD c:\windows\microsoft.net\framework64\v4.0.30319 
aspnet_regiis -i 
+0

Lần đầu tiên tôi thay đổi pool ứng dụng thành v4.0, loại bỏ lỗi, tuy nhiên ISS không tải ứng dụng MVC (thay vì cố gắng hiển thị thư mục) sau khi chạy các lệnh trên (dường như cài đặt .net 4) ứng dụng chạy (giống như sử dụng máy chủ ảo của studio trực quan). –

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