Развертывание приложения Asp.Net MVC 2/С# 4.0 на IIS 6
У меня возникла проблема с переносом из VS.Net 2008/ MVC 1 в VS.NET 2010 (+ С# 4.0)/ MVC 2
Обновлен web.config, сайт хорошо работает в Cassini, но теперь моя проблема развертывается на IIS 6.
Я обновил веб-сайт для запуска с помощью ASP.Net 4,
но какой бы URL я ни пытался, у меня всегда есть ошибка 404. Это как если бы маршрутизация не была учтена (да, было сделано
Ответы
Ответ 1
Хорошо, я получил ответ (спасибо коллеге)
При переходе с ASP.Net 2.0 на ASP.Net4.0,
если вы встретите ту же проблему,
затем проверьте Расширение веб-службы, если ASP.Net v4 Разрешено.
В моем случае, после установки .Net framework 4, это было запрещено.
Уилл и Марк: спасибо за вашу помощь, надеюсь, что это поможет другим.
Ответ 2
Я думаю, что знаю, что происходит: на IIS6, а также на подстановочном сопоставлении вам понадобится документ по умолчанию (Default.aspx), который маршрутизирует запросы папки к обработчику MVC.
Один из них был включен в шаблоны проектов MVC1, но он был удален в 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);
}
}
}
Когда вы говорите: "Как будто маршрутизация не учитывалась", я подозреваю, что на самом деле это не так, и это ваша проблема.
Ответ 3
Наконец, это исправлено для меня:
Я прокомментировал это раньше, и преждевременно. Мой комментарий к сообщению Mark B получил мой начальный индексный указатель, но я продолжал получать ошибки 404 всякий раз, когда я переходил к любому другому виду.
Я также был отвлечен одобренным зеленым флажком на этом форуме, но я даже не мог видеть папку расширения веб-серверов в IIS 6 на моем рабочем столе; поэтому у меня не было контроля с точки зрения включения aspnet 4.0, хотя я убедился, что он был установлен, выполнив следующую командную строку:
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319> aspnet_regiis -i
Теперь для фактического фрагмента, который, наконец, позволил мне перейти к другим представлениям, кроме моего Дома/Индекса:
В файле Global.asax.cs
вашего решения VS 2010 вы увидите следующий код в методе RegisterRoutes
:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
Я просто добавил ".aspx" после раздела {action} тега следующим образом:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}.aspx/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
И ахла вахла арахисовое масло и бутерброды с желе.: 0)
Ответ 4
Если вы хотите сделать это на С#, просто добавьте ссылку System.DirectoryServices, и эта часть должна хорошо работать.
DirectoryEntry w3svc = new DirectoryEntry("IIS://localhost/W3SVC");
w3svc.Invoke("EnableWebServiceExtension", "ASP.NET v4.0.30319");
w3svc.CommitChanges();
НТН