У меня есть веб-приложение, работающее на 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 такие же, как и на машинах разработчиков:
Также много полезной информации в этот поток MSDN