Wszystkie żądania do ASP.NET Web API zwracają błąd 404

Mam stronę internetową ASP.NET MVC 4, która zawiera Web API. Witryna jest rozwijana i testowana z Visual Studio 2012 i .NET 4.5 w systemie Windows 8 z IIS Express jako serwerem WWW.W tym środowisku programistycznym wszystko działa.

Teraz jest wdrażany na serwerze Windows 2008 R2 (SP1) z IIS 7.5. .NET 4.0 i 4.5 są zainstalowane. Pula aplikacji działa z .NET 4.0 w zintegrowanym trybie rurociągu.

W tym środowisku produkcyjnym działa strona internetowa MVC, Web API nie. Na każde żądanie, niezależnie od tego, czy GET, czy POST, otrzymuję błąd 404. Jeśli po prostu wprowadzę adres URL Web API w przeglądarce (IE 9 otwarty lokalnie na serwerze), aby uruchomić żądanie GET, otrzymuję stronę 404. Jeśli wydam żądanie POST z aplikacji klienckiej Web API, otrzymam również 404 i komunikat:

Nie znaleziono zasobu HTTP zgodnego z identyfikatorem URI żądania

Stworzyłem stronę testową z MVC 4 i Web API, a także wdrożyłem ją na tym samym serwerze i działa Web API. Web API i zestawy MVC mają ten sam numer wersji w obu projektach.

Ponadto dodałemWeb API Route Debugger do aplikacji. Jeśli korzystam z prawidłowej trasy, jakhttp://myserver/api/order/12 Otrzymuję następujący wynik:

Dla mnie oznacza to poprawny szablon trasyApi/{Controller}/{Id} został znaleziony i poprawnie przeanalizowany w kontrolerzeOrder iId=12. Kontroler (wyprowadzony zApiController) istnieje w zespole WWW, w którym znajdują się również wszystkie kontrolery MVC.

Nie wiem jednak, jaki jest status000 może oznaczać i dlaczego nie jest wyświetlana sekcja „Wybór trasy” (co zwykle ma miejsce nawet wtedy, gdy zespół nie zawiera pojedynczego fragmentu)ApiController, zobacz zrzuty ekranu na powyższej stronie z linkami. Wygląda na to, że nieApiController zostanie znalezione lub nawet nie wyszukane lub wyszukiwanie zakończy się niepowodzeniem.

Pliki dziennika IIS nie pokazują niczego użytecznego. Zmiana różnych ustawień puli aplikacji i użycie tej samej puli aplikacji dla testu i rzeczywistej aplikacji nie pomogło.

Obecnie jestem w trakcie usuwania z aplikacji „funkcji”, ustawień konfiguracji, zespołów innych firm itp., Aby w końcu sprowadzić je do niewielkiego rozmiaru aplikacji testowej i mieć nadzieję, że w pewnym momencie zacznie działać.

Czy ktoś ma pojęcie, czym może być ten problem? Również każdy pomysł na debugowanie lub rejestrowanie, aby znaleźć przyczynę, jest bardzo mile widziany.

Edytować

Dzięki wskazówkom Darrela Millera w komentarzach poniżej zintegrowałemŚledzenie dla ASP.NET Web Api.

Dla adresu URL żądania (GET)http://myserver/api/order/12 Otrzymuję następujące informacje:

W środowisku programistycznym sukces (w skrócie):

Wiadomość:http://localhost:50020/api/order/12; Kategoria: System.Web.Http.Request

Wybór kontrolera i instancja ...

Operator: DefaultHttpControllerSelector; Działanie: SelectController; Wiadomość: Route = "controller: order, id: 12"; Kategoria: System.Web.Http.Controllers

Operator: DefaultHttpControllerSelector; Działanie: SelectController; Wiadomość: Zamówienie; Kategoria: System.Web.Http.Controllers

Operator: HttpControllerDescriptor; Operacja: CreateController; Wiadomość:; Kategoria: System.Web.Http.Controllers

Operator: DefaultHttpControllerActivator; Operacja: Utwórz; Wiadomość:; Kategoria: System.Web.Http.Controllers

Operator: DefaultHttpControllerActivator; Operacja: Utwórz; Komunikat: MyApplication.ApiControllers.OrderController; Kategoria: System.Web.Http.Controllers

Wybór akcji, powiązanie parametrów i wywołanie akcji następuje ...

Negocjacja treści i formatowanie wyników ...

Operator: DefaultContentNegotiator; Operacja: Negocjuj; Wiadomość: Typ = „String” ...więcej

Usuwanie kontrolera ...

Operator: OrderController; Operacja: Usuń; Wiadomość:; Kategoria: System.Web.Http.Controllers

W środowisku produkcyjnym nie powiodło się (w skrócie):

Wiadomość:http://myserver/api/order/12; Kategoria: System.Web.Http.Request

Operator: DefaultHttpControllerSelector; Działanie: SelectController; Wiadomość: Route = "controller: order, id: 12"; Kategoria: System.Web.Http.Controllers

Brakuje całej części aktywacji kontrolera, wyboru działania, powiązania parametrów, wywołania akcji i następuje natychmiastowa negocjacja treści i formatowanie komunikatu o błędzie:

Operator: DefaultContentNegotiator; Operacja: Negocjuj; Wiadomość: Type = "HttpError" ...więcej

questionAnswers(3)

yourAnswerToTheQuestion