Назад | Перейти на главную страницу

Нет контроллера веб-API на инстансе Amazon EC2

У меня есть веб-приложение, работающее на IIS 7 в Windows Server 2008 R2 (версия Datacenter) и созданное с использованием Visual Studio 2010. Когда я развертываю проект веб-сайта на моем локальном сервере IIS или производственном сервере IIS, размещенном на VPS службы хостинга, API Доступ к контроллеру можно получить через /api/notifications/, который выполняется с помощью вызова AJAX с веб-страницы. Проблема в том, что при идентичной настройке на инстансе Amazon EC2 ни один из контроллеров API не работает, все они приводят к ответу 404 not found. Я проверил, что везде установлена ​​одна и та же версия .NET framework, что IIS использует одинаковые сопоставления обработчиков, модули, фильтры ISAPI, фильтрация запросов и настройки ASP идентичны. Выполнена трассировка неудачных запросов на экземпляре EC2 и не обнаружено ошибок, связанных с asp. Все в актуальном состоянии. Я пробовал добавить:

<modules runAllManagedModulesForAllRequests="true" />

а также попытался добавить:

<handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" 
         type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" 
         requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

В соответствующие места в файле web.config и все еще без контроллеров api. Обычно веб-сайт развертывается в папке «wwwroot», а все остальное работает, поэтому я также попытался выполнить развертывание в виртуальном каталоге, создав приложение и получив доступ /Test/api/notifications/ все еще приводит к 404 (в то время как я могу получить доступ к остальной части сайта на /Test/).

Я попытался перерегистрировать фреймворк через этот пост: http://www.aheil.de/2012/11/05/fixing-asp-net-mvc-4-web-api-404/

Я убедился, что в конфигурации IIS отмечен флажок «Разрешить неуказанные расширения имен файлов».

Есть идеи, почему это не работает на экземпляре EC2?

Проблема заключалась в том, что .NET Framework 4.5 был установлен на всех машинах разработчиков, но не на сервере Amazon EC2 Windows Server 2008 R2. Установка .NET 4.5, по-видимому, также обновила старые сборки 4.0 (в частности, я подозреваю, System.Net.Http и System.Web.Http), и поскольку веб-приложение было построено на версиях 4.5 этих сборок 4.0, контроллер веб-API не инициализировать при развертывании на сервере EC2.

Решение: убедитесь, что сборки фреймворка на сервере EC2 такие же, как и на машинах разработчиков:

  1. Установите .NET 4.5 на сервер EC2
  2. Удалите .NET 4.5 на машинах разработчика.

Также много полезной информации в этот поток MSDN