Mam witrynę sieci Web ASP.NET MVC 4, która zawiera Web API. Witryna została opracowana i przetestowana z Visual Studio 2012 i .NET 4.5 na Windows 8 z IIS Express jako serwer WWW. W tym środowisku programistycznym wszystko działa.Wszystkie żądania do interfejsu ASP.NET Web API zwracają błąd 404
Teraz jest wdrażany na serwerze Windows 2008 R2 (SP1) z usługami IIS 7.5. .NET 4.0 i 4.5 są zainstalowane. Pula aplikacji działa z .NET 4.0 w zintegrowanym trybie potokowym.
W tym środowisku produkcyjnym działa strona internetowa MVC, interfejs Web API nie działa. Dla każdego żądania, bez względu na to, czy jest to GET czy POST, pojawia się błąd 404. Jeśli po prostu wprowadzę adres URL interfejsu Web API w przeglądarce (IE 9 otworzył się lokalnie na serwerze), aby uruchomić żądanie GET, otrzymuję stronę 404. Jeśli mam wydać żądanie POST z aplikacji klienckiej Web API dostaję 404, jak również i komunikat:
Nie zasobów HTTP Stwierdzono, że pasuje do żądania URI
Utworzyłem przetestuj witrynę za pomocą MVC 4 i Web API, a następnie zainstaluj ją na tym samym serwerze i działa Web API. Zestawy Web API i MVC mają ten sam numer wersji w obu projektach.
Ponadto dodałem do aplikacji Web API Route Debugger. Jeśli używam ważnej trasy jak http://myserver/api/order/12
uzyskać następujący wynik:
Dla mnie oznacza to, że prawidłowa droga Api/{Controller}/{Id}
szablon został znaleziony i prawidłowo przetwarzane w kontrolerze Order
i Id=12
. Sterownik (pochodzący z ApiController
) istnieje w zespole internetowym, w którym znajdują się również wszystkie kontrolery MVC.
Jednak nie wiem, co może oznaczać status 000
i dlaczego nie jest wyświetlana sekcja "Wybór trasy" (co zwykle ma miejsce, nawet jeśli zespół nie zawiera pojedynczego ApiController
, zobacz zrzuty ekranu połączona strona powyżej). W jakiś sposób wygląda na to, że nie znaleziono ani nie szukano, lub wyszukiwanie nie powiedzie się po cichu.
Pliki dzienników IIS nie pokazują niczego użytecznego. Zmienianie różnych ustawień pul aplikacji i używanie tej samej puli aplikacji do testu i rzeczywistej aplikacji nie pomogło.
Obecnie jestem w trakcie usuwania "funkcji", ustawień konfiguracyjnych, złożeń innych producentów itp. Z aplikacji, aby w końcu obniżyć ją do małego rozmiaru aplikacji testowej i mieć nadzieję, że w pewnym momencie zaczyna działać.
Czy ktoś ma pojęcia, jaki może być problem? Również jakikolwiek pomysł na debugowanie lub rejestrowanie w celu znalezienia przyczyny jest bardzo mile widziany.
Edit
Dzięki końcówce Darrel Millera w komentarzach poniżej mam zintegrowany Tracing for ASP.NET Web Api.
Dla (GET) żądania URL http://myserver/api/order/12
uzyskać następujące:
- W środowisku programistycznym, sukces (w skróconej formie):
Wiadomość:
http://localhost:50020/api/order/12
; Kategoria: System.Web.Http.Requestwybór kontrolera i instancji ...
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; Wiadomość: MyApplication.ApiControllers.OrderController; Kategoria: System.Web.Http.Controllers
wybór Akcja, akcja i wiążąca parametr wywołania następująco ...
Content negocjacje i formatowanie wyniku ...
Operator: DefaultContentNegotiator ; Operacja: Negocjuj; Wiadomość: Typ = "string" ... więcej
Utylizacja kontroler ...
Operator: OrderController; Działanie: Usuń; Wiadomość:; Kategoria: System.Web.Http.Controllers
- W środowisku produkcyjnym, a nie sukces (w skróconej formie):
Wiadomość:
http://myserver/api/order/12
; Kategoria: System.Web.Http.RequestOperator: DefaultHttpControllerSelector; Działanie: SelectController; Wiadomość: Route = "controller: order, id: 12"; Kategoria: System.Web.Http.Kontrolery
Cała część aktywacji regulatora, dobór parametrów działania, wiązania, akcja inwokacja brakuje i wynika zawartości negocjacji i natychmiast formatowania komunikatu o błędzie:
Operator: DefaultContentNegotiator; Operacja: Negocjuj; Wiadomość: Type = "httpError" ... więcej
Może być konieczne aktywowanie niektórych funkcji IIS w roli Role serwera> Usługi internetowe Informacje> Usługi World Wide Web. Nie wiem dokładnie, co musisz aktywować, ale myślę, że twój problem może być tutaj! –
Spróbuj włączyć śledzenie interfejsu API sieci Web http://www.asp.net/web-api/overview/testing-and-debugging/tracing-in-aspnet-web-api –
Wygląda na to, że Twój interfejs WebAPI nie jest zarejestrowany. co się dzieje z 'Global.asax' i' WebApiConfig'? Czy mają w sobie jakieś warunkowe konfigurowanie? – Liel