Развертывание приложения Asp.Net MVC 2 / C # 4.0 на IIS 6 - PullRequest
14 голосов
/ 23 февраля 2010

У меня возникла проблема при переходе с VS.Net 2008 / MVC 1 на VS.NET 2010 (+ C # 4.0) / MVC 2

Файл web.config обновлен , сайт хорошо работает в Кассини, но моя проблема сейчас заключается в развертывании на IIS 6.

Я обновил веб-сайт для работы с использованием ASP.Net 4 , но какой бы URL я ни пробовал, у меня всегда ошибка 404. Как будто маршрутизация не была принята во внимание (да, сопоставление с подстановочными знаками *1018* было сделано).

Я не разбираюсь в этом беспорядке и не мог погуглить ничего интересного ... Спасибо за ваши предложения!

Ответы [ 4 ]

15 голосов
/ 24 февраля 2010

Хорошо, я получил ответ (спасибо коллеге)

При миграции с ASP.Net 2.0 на ASP.Net4.0, если вы встретите ту же проблему, затем отметьте расширение веб-службы , если ASP.Net v4 равен Разрешено .

В моем случае после установки .Net framework 4 это было запрещено.

Will & Mark: спасибо за вашу помощь, надеюсь, это поможет другим.

6 голосов
/ 23 февраля 2010

Мне кажется, я знаю, что происходит: на 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);
        }
    }
}

Когда вы говорите: «Как будто маршрутизация не была учтена», я подозреваю, что на самом деле это не так, и это ваша проблема.

2 голосов
/ 15 октября 2010

Это наконец исправило это для меня:

Я прокомментировал ранее, и немного преждевременно. В моем комментарии к сообщению Марка Б. появилось мое первоначальное представление «Индекс», но затем я продолжал получать ошибки 404 при каждом переходе к любому другому представлению.

Меня также отвлекло решение, одобренное зеленой галочкой на этом конкретном форуме, но я даже не мог видеть папку расширений веб-сервера в IIS 6 на своем рабочем столе; поэтому с этой точки зрения у меня не было контроля над включением aspnet 4.0, хотя я убедился, что он установлен, выполнив следующую командную строку:

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

Теперь о фактической части, которая, наконец, позволила мне перейти к другим представлениям, кроме только моего Home / Index:

В файле 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)

0 голосов
/ 28 июля 2011

Если вы хотите сделать это в C #, просто добавьте ссылку на System.DirectoryServices, и эта часть должна хорошо выполнить свою работу.

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

HTH

...