У меня есть веб-сайт ASP.NET MVC 4, который включает веб-API. Сайт разработан и протестирован с помощью Visual Studio 2012 и .NET 4.5 в Windows 8 с IIS Express в качестве веб-сервера. В этой среде разработки все работает.
Теперь он развернут на сервере Windows 2008 R2 (SP1) с IIS 7.5..NET 4.0 и 4.5 установлены. Пул приложений работает с .NET 4.0 в интегрированном режиме конвейера.
В этой производственной среде веб-сайт MVC работает, Web API не работает. Для каждого запроса, независимо от того, GET или POST я получаю ошибку 404. Если я просто введу URL-адрес веб-API в браузере (IE 9, открытый локально на сервере), чтобы запустить GET-запрос, я получаю страницу 404. Если я выдаю запрос POST из клиентского приложения Web API, я получаю также 404 и сообщение:
Не найден ресурс HTTP, который соответствует URI запроса
Я создал тестовый веб-сайт с MVC 4 и веб-API, а также развернул его на одном и том же сервере, и веб-API работает.. Web-API и сборки MVC имеют одинаковый номер версии в обоих проектов.
Кроме того, я добавил в приложение
Для меня это означает, что правильный шаблон маршрута Api/{Controller}/{Id}
найден и правильно разобран в контроллер Order
и Id=12
. Контроллер (полученный из ApiController
) существует в веб-сборке, где также находятся все контроллеры MVC.
Однако я не знаю, что может означать состояние 000
и почему не отображается раздел "Выбор маршрута" (что обычно имеет место, даже если сборка не содержит одного ApiController
, см. скриншоты на связанной странице выше). Как-то похоже, что ApiController
не найден или даже не найден, или поиск не работает молча.
Файлы журнала IIS не показывают ничего полезного. Изменение различных настроек пула приложений и использование одного и того же пула приложений для теста и реального приложения не помогло.
В настоящее время я пытаюсь удалить "функции", настройки конфигурации, сборки сторонних разработчиков и т.д. из приложения, чтобы в конечном итоге привести его к небольшому размеру тестового приложения и надеяться, что в какой-то момент он начнет работать.
Кто-нибудь знает, что может быть проблемой? Также очень приветствуется любая идея отладки или регистрации, чтобы найти причину.
Edit
Благодаря подсказке Даррела Миллера в комментариях ниже я включил Трассировка для ASP.NET Web Api.
Для URL-адреса запроса (GET) http://myserver/api/order/12
я получаю следующее:
- В среде разработки успешный (в краткой форме):
Сообщение:
http://localhost:50020/api/order/12
; Категория: System.Web.Http.RequestВыбор и создание контроллера...
Оператор: DefaultHttpControllerSelector; Операция: SelectController; Сообщение: Route = "controller: order, id: 12"; Категория: System.Web.Http.Controllers
Оператор: DefaultHttpControllerSelector; Операция: SelectController; Сообщение: Заказ; Категория: System.Web.Http.Controllers
Оператор: HttpControllerDescriptor; Операция: CreateController; Сообщение:; Категория: System.Web.Http.Controllers
Оператор: DefaultHttpControllerActivator; Операция: Создать; Сообщение:; Категория: System.Web.Http.Controllers
Оператор: DefaultHttpControllerActivator; Операция: Создать; Сообщение: MyApplication.ApiControllers.OrderController; Категория: System.Web.Http.Controllers
Выбор действия, привязка параметров и вызов действия следуют...
Согласование и форматирование контента для результата...
Оператор: DefaultContentNegotiator; Операция: переговоры; Сообщение: Typ = "String"... более
Утилизация контроллера...
Оператор: OrderController; Операция: Утилизировать; Сообщение:; Категория: System.Web.Http.Controllers
- В производственной среде не успешный (в краткой форме):
Сообщение:
http://myserver/api/order/12
; Категория: System.Web.Http.RequestОператор: DefaultHttpControllerSelector; Операция: SelectController; Сообщение: Route = "controller: order, id: 12"; Категория: System.Web.Http.Controllers
Вся часть активации контроллера, выбора действия, привязки параметра, вызова действия отсутствует, и он соответствует содержимому согласование и форматирование для сообщения об ошибке немедленно:
Оператор: DefaultContentNegotiator; Операция: переговоры; Сообщение: Тип = "HttpError"... подробнее