Подтвердить что ты не робот

Я получаю пустую страницу при развертывании приложения MVC в IIS

В настоящее время я развертываю свое приложение, созданное с помощью RC MVC ASP.NET на рабочем сервере, который ничего не показывает. Маршруты в моем global.ascx типичны, т.е.

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

Может ли кто-нибудь понять, почему он показывает мне только пустые страницы

Извините, я забыл упомянуть, что это IIS 6

Интересно, что он также работает над моим локальным IIS (т.е. локально встроенным с VS и стандартом с XP), а также

4b9b3361

Ответ 1

Я решил проблему, главной проблемой были различные версии MVC-инфраструктуры. У Production Server была бета-версия MVC, в то время как я установил MVC RC1. Поэтому, как только я установил RC1 на сервере, а также запустил скрипты регистрации расширений mvc, все сработало. Спасибо за помощь.

Ответ 2

Вы также получите пустую страницу, если у вас есть установка обработки ошибок в вашем global.asax, и что-то общее не так (например, сборку, которая не может быть найдена).

Когда вы отключите его в global.asax, вы увидите ошибку сервера. Не забудьте включить его снова после исправления этих исходных ошибок.

protected void Application_Error(object sender, EventArgs e)
{
    Exception exception = Server.GetLastError();
    RouteData routeData = new RouteData();
    routeData.Values.Add("controller", "ErrorController");
    routeData.Values.Add("action", "HandleTheError");
    routeData.Values.Add("error", exception);

    Response.Clear();
    Server.ClearError();

    IController errorController = new ErrorController();
    errorController.Execute(new RequestContext(
        new HttpContextWrapper(Context), routeData));
}

Ответ 3

Чистая страница отображается, когда ошибки возникают в определенных местах - в моем случае это было исключение MethodNotFoundException...

Чтобы увидеть эту ошибку, убедитесь, что вы включили службы "Ошибки HTTP" и "Перенаправление HTTP" в роли "Веб-сервер (IIS).

Ответ 4

Обычно, когда я получаю это, это потому, что я забыл добавить следующее в Web.config при развертывании в IIS6 после разработки на IIS7 (или IIS Express 7, который поставляется с Visual Studio):

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>

Ответ 5

Что такое серверная среда? Если это не IIS7/Server 2008, вам нужны другие настройки, чтобы правильно настроить маршрутизацию, хотя, если в этом случае вы, вероятно, получите страницу с ошибкой, а не пустую страницу.

Ответ 6

Если это производственный сервер, у которого возникла проблема, возможно, это полномочия. Вы должны убедиться, что все папки и файлы, которые использует ваше приложение, позволяют читать (и в некоторых случаях записывать, если вы используете журналы) в идентификатор роли, который использует IIS.

Обычно идентификатор IIS используется в свойствах веб-сайта → Безопасность каталога → Изменить (проверка подлинности и контроль доступа). Если вы не хотите, чтобы какой-либо компьютер в вашей сети обращался к веб-сайту, вам, вероятно, следует отключить "Включить анонимный доступ". Если вы хотите это разрешить, это будет тождество, которое вам нужно предоставить в ваших папках и файлах webapp. В противном случае вам может потребоваться предоставить доступ к роли, которая содержит идентификаторы пользователей, которые вы хотите получить.

Ответ 7

По внешнему виду я бы ожидал, что первый маршрут будет работать, если вы собираетесь использовать URL-адрес, например /Home.aspx, но если вы просто собираетесь в /url, тогда ASP.net не знает, как обрабатывать URL. Он будет пытаться сопоставлять страницы IIS по умолчанию, такие как index.html, default.aspx, index.aspx и т.д. Если ничего не найдено, запрос никуда не денется. Попробуйте создать файл default.aspx(или любой другой файл индекса на маршруте), затем в page_load выполните response.redirect("~/Home.aspx").

Если это не работает, я бы посмотрел этот . Одна из основных причин, по которым IIS 6 и MVC не играют хорошо, - это то, что IIS 6 по умолчанию не имеет wild card *, сопоставленного с dll ASP.net.

Я уверен, что это способ, которым настроен сервер продукта, можете ли вы провести какое-либо сравнение между экземпляром XP и продукцией?

Ответ 8

Есть ли у вас HTTP-обработчики и модули, определенные в web.config на рабочем сервере?

    <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpHandlers>
    <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>

В IIS6 URL-адреса должны содержать .mvc(например,/Products.mvc/ListAll). Проверьте эти руководства для правильной конфигурации IIS 6 и обходной путь расширения .mvc:

Развертывание ASP.NET MVC для IIS 6

Использование ASP.NET MVC для IIS 6 без расширения .MVC

Ответ 9

Это означает, что в приложении MVC есть исключение, но у вас, вероятно, есть класс в MVC, который захватывает, фильтрует и скрывает эти исключения. Эти исключения все еще бросаются, но вы не можете понять, что их вызывает. MVC по-прежнему перенаправляет запрос страницы, но ничего не возвращает из-за скрытых исключений. Вы не можете остановить проблему, пока не увидите, что выбрасываются исключения. Вы не видите исключения на веб-странице, пока не отключите фильтры обработки исключений MVC.

Одна вещь, которая может помешать вам увидеть исключения, - это GlobalFilterCollection, вызванный через фильтр MVC в global.asax, когда сайт загружается первым. Обычно вы можете найти эти вызовы в файле Global.asax. Этот файл обычно вызывает объект HttpApplication при первом загрузке веб-сайта и его событиях. В своих событиях он затем загружает в стандартные MVC-маршруты разработчики добавляют, но также может загружать фильтры, которые обрабатывают обработку исключений на всех сайтах. Разработчики часто используют обработку исключений через фильтры в global.asax, думая, что они разумно обрабатывают исключения и проблемы от пользователя, но это ошибка. Если вы найдете фильтр, просто прокомментируйте их. Внезапно все ваши ошибки снова появятся на вашей странице HTML.

Затем вы можете устранить эту проблему! Удачи!

Ответ 10

Это также происходило со мной, когда:

1) Я добавил атрибут CompressAttribute для добавления Gzip, когда браузер принимает его.

response.AppendHeader("Content-Encoding", "gzip");
                    response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);

2) Я модифицировал выходной HTML, чтобы изменить отображаемый номер телефона:

response.Filter = new OutputHtmlReplacer(response.Filter, phoneNumber);

где OutputHtmlReplacer - это класс, который наследуется от MemoryStream

Итак, решение было:

1) Проверьте заголовки и проверьте, применяем ли мы сжатие.

2) Если это так, то новый фильтр ответов OutputHtmlReplacer должен быть обернут GzipStream.

Ответ 11

Просто в случае, если кто-то сталкивается с той же проблемой, что и я, попробуйте следить за:

protected void Application_Error(object sender, EventArgs e) {

Для меня приложение молча проваливалось, и я не знал, так что, очевидно, оно возвращало пустое значение, но запутанная часть возвращала 200 как код состояния ответа http.

Во всяком случае, я надеюсь, что это поможет кому-то в будущем.

Ответ 12

Попробуйте удалить файл app_offline.htm если он создается в вашем приложении.