2016-05-07 7 views
0

У меня есть очень маленькое веб-приложение AngularJS, которое я написал, и что я пытаюсь размещать на IIS локально на своей машине, чтобы он был доступен для других устройств в моей локальной сети , В этом приложении я использую вызовы Web API 2 для доступа к данным, которые подключаются к моей базе данных через Entity Framework.ASP.NET Web Api 2 перерывы на IIS 7.5

Приложение работает нормально, когда я запускаю его локально, запустив его в Visual Studio. Однако, когда я развертываю его при установке IIS, я получаю 404 ошибки всякий раз, когда запрос отправляется на URL веб-API. Сама страница загружается, и я могу перемещаться по другим страницам, только когда запрос делается на один из методов, которые я объявил в своем контроллере Web API, я получаю ошибки 404.

У меня 64-разрядная версия Windows 7 Pro и установлен IIS с помощью функций «Установка и удаление Windows» на панели управления. Я установил ASP.NET 4.0 с помощью команды aspnet_regiis -i. При публикации я делаю это в Community Community 2015 2015, щелкнув правой кнопкой мыши на проекте и выбрав «Опубликовать». Я использовал руководство с официального сайта ASP.NET при настройке публикации в первый раз (http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-to-iis)

Я попытался следующие шаги, чтобы решить эту проблему без успеха:

  1. Uninstall/Повторная установка IIS с помощью Add/Remove Возможности Windows
  2. Добавление <validation validateIntegratedModeConfiguration="false" /> и <modules runAllManagedModulesForAllRequests="true" /> в web.config
  3. изменяющемся путь (путем удаления периода) на <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> обработчик, определенный в web.config
  4. Ручное добавление обработчика ApiURIs-ISAPI-Ingegrated-4.0 для веб-конфигурации
  5. Добавление <remove name="UrlRoutingModule" /> и <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule" preCondition=""/> раздел <system.webServer> модулей
  6. двойной проверки, что мой пул приложений устанавливается в интегрированном режиме и устанавливается использовать .Net Framework v4.0.30319
  7. Применение официального исправления Microsoft, доступное по адресу https://support.microsoft.com/en-us/kb/980368 После установки исправления этого исправления указано, что оно несовместимо с моим компьютером.
  8. Убедитесь, что мой компьютер обновлен с последними обновлениями Windows.
  9. Снимите флажок «Вызовы только для запросов к приложениям ASP.NET для управляемых обработчиков» для модуля UrlRoutingModule-4.0, найденного через Сайты -> По умолчанию Веб-сайт -> Модули в разделе IIS -> Опция привязки правой стороны в разделе Действия
  10. Проверка того, что System.Net.Http, System.Net.Http.Formatting, System.Web.Http.WebHost и System.Web .Http все присутствуют в папке с корзиной для сайта

Я был повсюду в interwebs, ища решение в течение ближайших двух дней и h аве еще не найти. Похоже, на этом сайте есть ряд похожих вопросов, и люди, которые сталкиваются с одной и той же проблемой, но ни один из найденных мной не решил проблему до сих пор.

Мне кажется совершенно нелепо, что для этого нужно прилагать все усилия, чтобы это работало так, как предполагается из коробки. Любая помощь, которую вы можете предоставить, я бы очень признателен.

TL; DR: Web API 2 ломается при развертывании с помощью приложения AngularJS для IIS 7.5. См. Список выше для шагов, предпринятых для попытки исправить ошибки.

UPDATE 1

Я попытался настроить Failed Request Tracing, используя следующие ссылки из IIS.net:

  1. http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis
  2. http://www.iis.net/learn/troubleshoot/using-failed-request-tracing/using-failed-request-tracing-rules-to-troubleshoot-application-request-routing-arr

Это возвращающую файл журнала с предупреждением, которое выглядит следующим образом:

Это снайпер из полного запроса на трассировку. Я был бы рад предоставить полный файл, если это необходимо.

UPDATE 2

Удаление WebDAV с помощью Add/Remove функции не решает проблему. Ошибка та же «файл не может быть найден», как указано выше, и вот новый отрывок из Полного запроса трассировки

Мой класс WebApiConfig выглядит следующим

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

Мой класс Web API выглядит

[RoutePrefix("api/foods")] 
public class FoodsController : ApiController 
{ 

    [Route("all")] 
    [HttpGet] 
    public List<tblFood> getAllFoods() 
    { 
     List<tblFood> foodsList = new List<tblFood>(); 

     try 
     { 
      using (FoodEntities dbContext = new Entity_Models.FoodEntities()) 
      { 
       foodsList = (from food in dbContext.tblFoods select food).ToList(); 
      } 
     } 
     catch(EntityException e) 
     { 
      throw new ApplicationException(createErrorStringFromException(e)); 
     } 

     return foodsList; 
    } 
} 

Пробу звонок от моей угловой службы JS использует вызов

$http.get('/api/foods/all') 

В моем классе объявлено несколько других методов CRUD, но все они объявлены таким же образом и которые я оставил из приведенного выше кода для краткости. Я использую «все» маршрут в качестве теста.

При настройке маршрутизации я использовал ресурсы http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api и http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2.

+0

У Вас есть ** ** все из вспомогательных функций IIS установлен? По умолчанию установка IIS на рабочем столе Windows исключает многие встроенные функции по какой-либо причине, вам нужно вручную проверить все флажки в диалоговом окне «Ad/Remove Features». – Dai

+0

@ Дай Да, я установил все вспомогательные функции. Даже те, которые мне не нужны, как FTP-сервер и совместимость с IIS 6 Management. Единственным элементом, связанным с IIS, указанным в разделе «Установка и удаление компонентов», который я не установил, является IIS Hostable Web Core, который указан отдельно. – Josh

+1

Вы пробовали отслеживать неудачные запросы? Когда вы используете Visual Studio для запуска приложения, вы попытались настроить его на использование локального IIS вместо IIS Express? Вы используете подкаталог для своего приложения? Если да, настроили ли вы необходимые виртуальные и прикладные области? – Dai

ответ

0

Журнал отслеживания неудачных запросов показывает, что IIS вызывает WebDAV для обработки запроса, что предполагает, что запрос выполняется, например, с помощью метода PUT.

Отключите модуль WebDAV и повторите попытку. Следуйте этому руководству: http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications

И это QA: ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8