2009-03-13 34 views
5

Chúng tôi đã phát hiện sự cố khi triển khai ứng dụng MVC trên máy chủ IIS7: bất kỳ điều hướng tuyến đường nào cung cấp lỗi 404. Tôi đã tìm thấy trên web rằng vấn đề có thể được giải quyết bằng cách thiết lập chế độ quản lý đường ống ứng dụng được tích hợp, nhưng bây giờ chúng tôi có ngoại lệ:Vấn đề định tuyến ASP MVC với IIS7

Request is not available in this context 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: Request is not available in this context 

Source Error: 


Line 19: 
Line 20:   public override void SetActiveUser(Guid userOid) { 
Line 21:    FormsAuthentication.SignOut(); 
Line 22:    HttpContext.Current.Items[Key] = userOid.ToString(); 
Line 23:    FormsAuthentication.RedirectFromLoginPage(userOid.ToString(), true); 

Có ai có ý tưởng nào không?

Trả lời

10

Sự cố có thể nằm trong tệp web.config. Kể từ IIS7 bây giờ có hai nơi để cấu hình các trình xử lý và các mô-đun. Khi bạn chạy ở chế độ cổ điển, giống như chạy trên IIS 6 (mặc dù dưới IIS7).

Đây là tập tin cấu hình:

<system.web> 
[...] 
    <httpHandlers> 
      [...] 
     </httpHandlers> 
     <httpModules> 
      [...] 
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 

     </httpModules> 
    </system.web> 

cần có chỉ IIS 6 cấu hình.

IIS 7 cấu hình nên được đặt dưới:

<system.webServer> 
[...] 
      <modules runAllManagedModulesForAllRequests="true" > 
       <remove name="UrlRoutingModule"/> 
       <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
      </modules> 
      <handlers> 
       <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
      </handlers> 
     </system.webServer> 
1

Để glom vào những gì kvalcanti đã nêu. Định tuyến chuẩn được thiết kế cho IIS 7. Có một kludge được thêm vào cho các phiên bản cũ của IIS. Vì vậy, nếu bạn đang deving trên phiên bản cũ hơn, bạn có phiên bản kludged lên của tập tin cấu hình. Việc thay đổi cấu hình sẽ giải quyết vấn đề.

Ngoài những gì đề cập đến kvalcanti, có khả năng bạn cũng có một chút thiết lập kludge trong global.asax của mình. Tôi không chắc chắn nó vẫn còn bắt buộc trong phiên bản mới nhất của ASP.NET MVC, hay không, như tôi đã không deved trên bất cứ điều gì nhưng Vista trong vài tháng qua.

bài này có một số cái nhìn sâu sắc: http://www.developingfor.net/aspnet-mvc/deploying-aspnet-mvc-on-iis6.html

Scott Guthrie đã có một bài viết trên blog lớn về vấn đề này trên blog của mình (http://weblogs.asp.net/scottgu/), nhưng tôi không có nó đánh dấu.

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